2016-07-07 8 views
2

у меня есть эта программка, которая должна только связать сокет к порту и я всегда получитьпередать аргументы функции связывания()

неудачи при связывании.

Я могу скомпилировать его без проблем.

Должен ли я добавить что-то к servAddr?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include "Practical.h" 

int main(int argc , char* argv[]){ 

    if(argc!=2){ 
     printf("Parameters : <server Port>"); 
    } 

    in_port_t servPort=atoi(argv[1]); 

    int servSock; 
    if(servSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)<0){ 
     printf("error socket"); 
    } 

    struct sockaddr_in servAddr; 
    memset(&servAddr,0,sizeof(servAddr)); 
    servAddr.sin_family=AF_INET; 
    servAddr.sin_addr.s_addr=htonl(INADDR_ANY); 
    servAddr.sin_port=htons(servPort); 

    if(bind(servSock,(struct sockaddr*) &servAddr,sizeof(servAddr)) < 0){ 
     printf("failure while binding"); 
    } 
} 
+0

Какова ценность 'errno'? – blatinox

+1

Вместо того, чтобы печатать общие сообщения об ошибках, было бы полезно использовать 'perror()' для генерации сообщений, специфичных для этой проблемы. –

+1

Почему вы не заменяете 'printf()' '' perror() 'и не видите причину сбоя? – EOF

ответ

6

= имеет приоритет ниже, чем <, добавить дополнительные фигурные скобки:

if((servSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0){ 
    printf("error socket");} 

Без этих скобок servSock является 1 или 0, что, безусловно, не то, что вы хотите. Также обратите внимание, что без привилегий вы не можете привязываться к портам ниже 1024.

Смежные вопросы