gpt4 book ai didi

c - 为什么当我写入套接字时它可能是 "bad file number"

转载 作者:行者123 更新时间:2023-11-30 18:01:18 25 4
gpt4 key购买 nike

我在从客户端向服务器套接字发送消息时遇到问题。write 函数返回错误 - 错误的文件号。这意味着我无权写入该套接字。但是从另一个客户端我可以写入这个套接字,并成功完成。最有趣的是,当另一个客户端连接到服务器时,我的(问题)客户端也可以发送消息。

我的客户的代码:

SOCKET OnceCommand;
struct sockaddr_in SAddress4;

struct autoC
{
char buf[4];
short fromx;
short fromy;
short tox;
short toy;
char step;
char cycle;
};
union autocomm{
char byte[14];
struct autoC command;
} Command1, Command2;

memset(&SAddress4,0,sizeof(SAddress4));
SAddress4.sin_family = AF_INET;
SAddress4.sin_port = htons(444);
SAddress4.sin_addr.s_addr = inet_addr(RobotsIP[Robot1]);
memset(&(SAddress4.sin_zero),0,8);

if((OnceCommand = socket(AF_INET,SOCK_STREAM,0))!=SOCKET_ERROR)
{
Err(OnceCommand);
if(conn = connect(OnceCommand,(struct sockaddr *)&SAddress4,sizeof(struct sockaddr))!=SOCKET_ERROR)
{
rc = write(OnceCommand,(char*)Command1.byte,sizeof(Command1.byte));
if(rc < 0)
{
perror("Client-write() error");
rc = getsockopt(OnceCommand, SOL_SOCKET, SO_ERROR, &temp, &length);
if(rc == 0)
{
Err(OnceCommand);
perror("SO_ERROR was");
}
closesocket(OnceCommand);
}
else
{
adv_printf("Client-write() is OK\n");
adv_printf("String successfully sent lol!\n");
}
shutdown(OnceCommand,2);
closesocket(OnceCommand);
}
}

SO_ERROR 中是“错误的文件号”

我在基于 ROM-DOS 的 ADAM-5510 微 Controller 中使用套接字库。

我试图通过使用 NONBLOCKing 套接字来解决这个问题,但 select 只返回读就绪标志。

最佳答案

您正在使用 0 作为协议(protocol)。这应该是什么?如果是 TCP,请尝试在套接字调用中使用 IPPROTO_TCP,即。

OnceCommand = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)

关于c - 为什么当我写入套接字时它可能是 "bad file number",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882538/

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