我为服务器实现编写的代码无效。
程序无法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 :(得分:6)
这是你的问题:
if(socket_descriptor = socket(AF_INET, SOCK_STREAM , 0) < 0)
小于运算符<
的优先级高于赋值运算符=
。所以上面相当于:
if(socket_descriptor = (socket(AF_INET, SOCK_STREAM , 0) < 0))
假设socket
成功,返回的文件描述符将不是负数,因此比较将评估为0(即false),然后将该值分配给socket_descriptor
。由于文件描述符0为stdin
,因此您会收到有关非套接字上的套接字操作的错误。
添加正确的括号组会将套接字分配给socket_descriptor
:
if ((socket_descriptor = socket(AF_INET, SOCK_STREAM , 0)) < 0)