我正试图用这个绑定套接字:
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>
int main()
{
int fd,namelen,newfd;
struct sockaddr_in sin = {AF_INET};
if(fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)==-1)
printf("socket : %d\n",errno);
if(bind(fd,(struct sockaddr *)&sin,sizeof(sin))==-1)
printf("bind : %d\n",errno);
}
那回归“bind:88”,我觉得这意味着ENOTSOCK fd,真的不是套接字吗?或88不是ENOTSOCK?
答案 0 :(得分:5)
注意括号,事实上fd = 0
由于在==
之前评估了=
(请参阅C Operator Precedence),因此您的代码等同于fd = (socket(...) == -1)
。
你应该替换
if(fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)==-1)
与
if((fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)