C TCP/IP 服务器绑定(bind)错误 -- 非套接字上的套接字操作

标签 c sockets server bind tcp

<分区>

当我运行以下程序时,我的程序开始执行绑定(bind)函数,但失败并给我留下错误“非套接字上的套接字操作”。我不确定发生了什么。我用“gcc a3server.c -g -o server”编译,没有编译错误。

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

最佳答案

线

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

应该是

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

关于C TCP/IP 服务器绑定(bind)错误 -- 非套接字上的套接字操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29452147/

相关文章:

c - 浮点精度 C - 将参数传递给 Xively

python - 通过 Python 调用 C 函数 - 编译后

c - 从 NTP 服务器获取毫秒

c - 连接列表在 C 套接字编程中显示 0.0.0.0

java - 用于车辆位置的实时网站和Java中的数据库R/W

c - 将文件从客户端发送到服务器

c - 段错误: 11 Pointers and Structures

c - Linux下C语言生成Socket及wireshark检测frame错误

c - 来自 UDP 套接字的 read() 丢弃数据并在 C 中意外阻塞

http - 如何停止使用 'npm install http-server"下载的 http 服务器?