2017-08-15 4 views
2

サーバ実装のために書いたコードは動作しません。 プログラムcant 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_descriptorにソケットを割り当てる括弧の適切なセットを追加

socket.html) – EsmaeelE

答えて

6

はあなたの問題です:

if(socket_descriptor = socket(AF_INET, SOCK_STREAM , 0) < 0) 

小なり演算子<が代入演算子=よりも優先順位が高いです。等価である上記ので:socketが成功したと仮定すると、

if(socket_descriptor = (socket(AF_INET, SOCK_STREAM , 0) < 0)) 

、返されたファイルディスクリプタは、負でないので、比較は(すなわち偽)0と評価され、その値は、その後socket_descriptorに割り当てられています。そして、ファイル記述子0がstdinであるため、非ソケット上でソケット操作に関するエラーが発生します。

if ((socket_descriptor = socket(AF_INET, SOCK_STREAM , 0)) < 0) 
+0

ありがとう!それは働いた:) –

+1

非常に良いdbush ...。ちょうどオペレータの優先順位! – EsmaeelE

関連する問題