gpt4 book ai didi

c - 套接字API : bind error: Socket operation on non-socket

转载 作者:行者123 更新时间:2023-11-30 20:08:09 24 4
gpt4 key购买 nike

我是 c 新手,我正在尝试学习套接字 api,但出现此错误:来自 Bind 的非套接字上的套接字操作

套接字没有给出错误

daytimeserv1.c:

#include "../holds/runp.h"
#include "../holds/wrapper.h"

int main(int argc, char **argv) {
int listenfd, connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;

listenfd = Socket(AF_INET, SOCK_STREAM, 0);

memset(&listenfd, 0, sizeof(listenfd));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);

Bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

Listen(listenfd, LISTENQ);

for( ; ; ) {
connfd = Accept(listenfd, (struct sockaddr *) NULL, NULL);
ticks = time(NULL);
snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
Write(connfd, buff, strlen(buff));

Close(connfd);
}
}

包装器wrapper.c

#include "wrapper.h"

void err_sys(const char* x) {
perror(x);
exit(1);
}

int Socket(int family, int type, int protocol) {
int n = socket(family, type, protocol);
if (n < 0)
err_sys("socket error");
return(n);
}

void Bind(int fd, const struct sockaddr *sa, socklen_t salen) {
if(bind(fd, sa, salen) < 0)
err_sys("bind error");
}

runp.h 只是包含和常量

非常感谢任何帮助!谢谢!(如果有帮助的话,我的构建系统是 bazel)

最佳答案

您正在删除刚刚通过创建的套接字句柄

memset(&listenfd, 0, sizeof(listenfd));

所以你应该删除它。我猜你真正想做的是

memset(&servaddr, 0, sizeof(servaddr));

关于c - 套接字API : bind error: Socket operation on non-socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58245578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com