linux socket recv 失败,socket中的socket recv,行为错误

问候!

我使用开发为socket服务器的linux中的unpv13e库,并监听一个端口

将接受3个套接字客户端(最多),每个客户端都有自己的线程....

虽然这3个客户端发送的速度非常快,但套接字服务器的recv功能会

接收到来自客户端1的一半字符串,另一半来自客户端2,

这很奇怪,因为我认为这3个套接字客户端将运行在不同的线程中,

也有不同的套接字ID,所以我很好奇它为什么发生?让我解释一下

以下代码:

listenfd = Tcp_listen(ipaddr,portno,&addrlen);

cliaddr = Malloc(addrlen);

Signal(SIGINT, sig_int);

for ( ; ; ) {

clilen = addrlen;

connfd = Accept(listenfd, cliaddr, &clilen);

err_msg("id [%05d] conned from %s",connfd,Sock_ntop(cliaddr, clilen));

Pthread_create(&tid, NULL, &doit, (void *) connfd);

}

void * doit(void *arg)

{

void web_child(int);

Pthread_detach(pthread_self());

web_child((int) arg);

Close((int) arg);

printf("thread [%05d] dead...\n",(int) arg);

return(NULL);

}

void web_child(int sockfd)

{

int connfd;

ssize_t nread;

char line[1024];

for ( ; ; )

{

line[0]=0x00 ;

if ( (nread = Readline(sockfd, line, 1024)) == 0)

break; /* connection closed by other end */

line[nread-2]=0x00 ;

if(strncmp(line,"101",3)==0)

Do101(line) ;

if(strncmp(line,"201",3)==0)

Do201(line) ;

if(strncmp(line,"301",3)==0)

Do301(line) ;

}

}在unpv13e库中的readline函数调用recv,并且一次检查一个字符

直到它是'\ n'并返回,通常315字节左右,

我没有发送这个套接字服务器!

在我看来,web_child函数是作为线程运行的,具有不同的socketfd,

而line是局部变量,所以3个不同的客户端不会相互影响,

套接字client1将始终以“101”发送字符串开头,并且client2始终发送“201”,

client3发送“301”....

但有些搜索结果会在Do101(行)中看到一个字符串,其中一半是“101”,

而后半部分来自client2,它们只是互相影响......

如果这3个客户非常频繁地发送,可能会发生......不是很频繁,

但它刚刚发生!

代码中有什么样的错误?在不同的线程中从不同的socketid recv

会互相影响?

任何建议,欢迎!谢谢 !!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值