社区
Linux/Unix社区
帖子详情
大家来谈谈linux下多线程编程的“interrupted system call"错误!来者有分
liben
2003-08-14 10:14:05
大家来谈谈linux下多线程编程的“interrupted system call"错误!来者有分
...全文
1322
7
打赏
收藏
大家来谈谈linux下多线程编程的“interrupted system call"错误!来者有分
大家来谈谈linux下多线程编程的“interrupted system call"错误!来者有分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
liben
2003-08-15
打赏
举报
回复
我解决了,
只因为一点!
风格太糟,
if()后面多了个分号!
程序行太长,注意不到!
各位,程序一定要保持良好的风格!
我太惭愧了!
浪费大家的时间!!!
liben
2003-08-14
打赏
举报
回复
本人,刚毕业,刚找到工作!望高手们多多指教!!
liben
2003-08-14
打赏
举报
回复
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
using namespace std;
char g_MutexBuf[100];
fd_set fdset;
struct timeval timeout;
pthread_mutex_t serverMutex = PTHREAD_MUTEX_INITIALIZER;
//unsigned int portNum ;
int fdsock;
void * manageConnect(void * paddress)
{
struct sockaddr_in server_address;
struct sockaddr_in client_address;
socklen_t cAddrLen;
sleep(7);
FD_ZERO(&fdset);
FD_CLR(fdsock, &fdset);
FD_SET(fdsock, &fdset);
cout << "this is mangeConnet" << endl;
if((select(fdsock+1, &fdset, NULL, NULL, &timeout)) < 0){
cout << "cannot select .\n"<< strerror(errno)<<endl;
fflush(stdout);
exit(0);
}
if(FD_ISSET(fdsock, &fdset)){
server_address = *(struct sockaddr_in*)paddress;
server_address.sin_port = htons(4000);
cAddrLen = sizeof(client_address);
pthread_mutex_lock(&serverMutex);
int d = recvfrom(fdsock, g_MutexBuf, 100, 0, (struct sockaddr*)&client_address, (socklen_t*)&cAddrLen);
pthread_mutex_unlock(&serverMutex);
if(d < 0){
cout <<"receive fail"<< strerror(errno)<<endl;
exit(0);
}
char *message="i already receive your data mangere\n";
int f = sendto(fdsock, message, strlen(message)+1, 0, (struct sockaddr *)&client_address, cAddrLen);
if(f < 0){
cout << "sendto fail" << strerror(errno)<<endl;
exit(0);
}
}else{pthread_exit(NULL);
}
}
int main(int argc,char ** argv)
{
struct sockaddr_in address;
int addr_len;
pthread_t connectThread;
/*char **abc;
if(argc !=2){
cout << "please input parameter"<< endl;
exit(0);
}
portNum = strtol(argv[1],abc , 10); */
if((fdsock = socket(AF_INET,SOCK_DGRAM ,0)) < 0){
cout << "socked error"<<endl;
exit(1);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(3008);
addr_len = sizeof(address);
int a = bind(fdsock, (struct sockaddr*)&address, addr_len) ;
if(a < 0){
cout << "bind error" << strerror(errno) << endl;
exit(0);
}
if(pthread_create(&connectThread, NULL, manageConnect, (struct sockaddr *)&address) );
{cout << "create pthread fail"<< endl<<strerror(errno)<<endl;
abort();
}
while(1)
{
struct sockaddr_in client_addr;
socklen_t client_len;
address.sin_port = htons(3009);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
//set fdset
FD_ZERO(&fdset);
FD_CLR(fdsock, &fdset);
FD_SET(fdsock, &fdset);
cout << " main funcition"<<endl;
if((select(fdsock+1, &fdset, NULL, NULL, &timeout)) < 0){
cout << "cannot select .\n"<< strerror(errno)<<endl;
fflush(stdout);
exit(0);
}
else{}
if((FD_ISSET(fdsock, &fdset))){
client_len = sizeof(client_addr);
pthread_mutex_lock(&serverMutex);
int d = recvfrom(fdsock, g_MutexBuf, 80, 0, (struct sockaddr*)&client_addr, (socklen_t*)&client_len);
pthread_mutex_unlock(&serverMutex);
if(d < 0){
cout << "receive errno" << strerror(errno) << endl;
exit(0);
}
cout << g_MutexBuf<<endl;
char *message = "i alerad receive data";
int b = sendto(fdsock, message, strlen(message)+1, 0, (struct sockaddr*)&client_addr , client_len);
if(b < 0)
{cout << "sendto error" << strerror(errno) << endl;
exit(1);
}
close(fdsock);
} else{
sleep(5);
cout << "no data reache"<<"."<<endl;
fflush(stdout);
}
}//while
if(pthread_join(connectThread, NULL))
{cout << "join fail "<< strerror(errno)<<endl;
exit(1);
}
}
blh
2003-08-14
打赏
举报
回复
look your code
liben
2003-08-14
打赏
举报
回复
这是原因之一,但我的程序应该不是这个原因!有空看代码吗
foolfei
2003-08-14
打赏
举报
回复
到上限了吧,每个process最多250左右个thread
Darcy_hy
2003-08-14
打赏
举报
回复
我也遇到类似问题,关注!
Linux
中的
Interrupt
ed
system call
错误
2019独角兽企业重金招聘Python工程师标准>>> ...
Linux
下semop等待信号时出现
Interrupt
ed
System Call
错误
(EINTR)
错误
现象:(semop函数调用,strerror(errno)输出结果)
Interrupt
ed
system call平台:R
ed
Hat
Linux
LINUX
文档关于EINTR的描述是这样子的: While block
ed
in this system call, the process caught a signal.UNIX文档[IEEE Std 1003.1-
Interrupt
ed
system call
关键字: gdb epoll_wait select sem_wat 我们在利用 gdb 调试带有 epoll_wait select sem_wat 的
多线程
代码的时候可能会出现非正常返回 -1 的情况,
错误
原因是:
Interrupt
ed
system call。这是由于 gdb调试的时候会在断点处插入一条中断指令,当程序执行到该断点处的时候会发送一个SIGTRAP信
zabbix [4]
Interrupt
ed
system call
错误
Get value from agent fail
ed
: cannot connect to [[0.0.0.0]:10050]: [4]
Interrupt
ed
system call报了这个
错误
,找了很久原因,网上的解决办法就是1.检查端口,关闭防火墙,关闭se
Linux
;2.关闭ipv6。我试了都无效,telnet还是不通,最后发现我用的是阿里云服务器,默认10050/10051没有开放,需
zabbix连接性问题
interrupt
ed
system call
zabbix
interrupt
ed
system call
Linux/Unix社区
23,121
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章