2015-04-04 85 views
1

當我運行以下程序時,我的程序啓動了綁定功能,並且失敗,導致出現錯誤「套接字在非套接字上的操作」。我不確定發生了什麼。我用「gcc a3server.c -g -o服務器」進行編譯,沒有編譯錯誤。C TCP/IP服務器綁定錯誤 - 在非套接字上的套接字操作

#include <stdio.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netinet/in.h> 
#include <stdlib.h> 
#include <string.h> 
#include <errno.h> 

int main(int argc, char *argv[]) 
{ 
    if (argc != 2) 
    { 
     printf("Error. Please enter the right amount of arguments (2)"); 
     exit(1); 
    } 

    int sock, port, clientlen, connection, readfd, writefd; 
    char buffer[255]; 
    struct sockaddr_in server, clientaddr; 

    if (sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) < 0) 
    { 
     printf("Socket was not made."); 
     exit(1); 
    } 

    //bzero((char *) &server, sizeof(server)); 
    port = atoi(argv[1]); 

    server.sin_family = AF_INET; 
    server.sin_addr.s_addr = INADDR_ANY; 
    server.sin_port = htons(port); 

    int bindfd = bind(sock, (struct sockaddr *) &server, sizeof(server)); 

    if (bindfd < 0) 
    { 
     perror("Could not bind socket to address: "); 
     exit(1); 
    } 

    listen(sock, 5); 

    clientlen = sizeof(clientaddr); 

    if (connection = accept(sock, (struct sockaddr *) &clientaddr, &clientlen) < 0) 
    { 
     printf("Could not accept connection"); 
     exit(1); 
    }  

    if (readfd = read(connection, buffer, 255) < 0) 
    { 
     printf("Could not read from socket"); 
     exit(1); 
    } 

    printf("!---THIS IS A TEST---! \n BUFFER: %s", buffer); 

    if (writefd = write(connection, buffer, 255) < 0) 
    { 
     printf("Could not write to socket"); 
     exit(1); 
    } 

    return 0; 
} 

回答

1

if (sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) < 0) 

線應該是

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) 
+1

更一般地,如果在條件不好的做法做任務。 – 2015-04-04 22:52:05