2017-08-15 41 views
2

我爲服務器實現編寫的代碼不工作。 程序錯誤bind()套接字地址正確並生成錯誤。套接字編程,bind()錯誤

代碼

#include<stdio.h> 
#include<unistd.h> 
#include<sys/types.h> 
#include<sys/socket.h> 
#include<netinet/in.h> 
#include<string.h> 
#include<stdlib.h> 
#include <netdb.h> 

int main(int argc , char* argv[]) 
{ 
    int socket_descriptor; 
    struct sockaddr_in server; 
    char buffer[512]; 
    int rval; 
    int socket_a; 

    if(socket_descriptor = socket(AF_INET, SOCK_STREAM , 0) < 0) 
    { 
     perror("Error at creating the socket"); 
     exit(1); 
    } 

    server.sin_family = AF_INET; 
    server.sin_addr.s_addr = INADDR_ANY; 
    server.sin_port = htons(5000); 

    if(bind(socket_descriptor,(struct sockaddr *)&server,sizeof(server)) < 0) 
    { 
     perror("Error at binding"); 
     exit(1); 
    } 

} 

錯誤

錯誤的結合:對非套接字套接字操作。

+0

使用這些[代碼](http://www.cs.rpi.edu/~moorthy/Courses/os98/Pgms/ socket.html) – EsmaeelE

回答

6

這是你的問題:

if(socket_descriptor = socket(AF_INET, SOCK_STREAM , 0) < 0) 

的小於運算符<比賦值運算符的優先級=更高。所以上面的等價於:

if(socket_descriptor = (socket(AF_INET, SOCK_STREAM , 0) < 0)) 

假設socket成功,描述符返回的文件不會爲負,因此比較將評估爲0(即假),然後該值被分配給socket_descriptor。並且由於文件描述符0是stdin,所以您在非套接字上收到有關套接字操作的錯誤。

添加適當的組括號將插座分配給socket_descriptor

if ((socket_descriptor = socket(AF_INET, SOCK_STREAM , 0)) < 0) 
+0

謝謝!那工作:) –

+1

非常好的dbush ...。只是運營商的優先權! – EsmaeelE