2015-01-24 4 views
2

바인드 반환 오류 :난 그냥이있는 소켓에 결합하기 위해 노력하고있어 88

#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); 
} 

그리고 돌려 "바인드 : 88"나는이 ENOTSOCK의 FD를 의미하는 생각을, 소켓은 정말 아니다? 또는 88 ENOTSOCK 아닌가요?

답변

2

괄호를주의하십시오. 실제로는 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) 
관련 문제