2017-08-15 42 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