c++ - nvidia 驱动程序使套接字在接受时失败

标签 c++ ubuntu opengl pthreads nvidia

这是一个使用 glut 和 pthreads 的程序的编译摘录。

使用nvidia驱动版本295,当glutmainloop启动时tcp accept中断(程序报错4)

程序在 275 版本中运行良好。

(ubuntu,3.0.0-17-generic#30-Ubuntu SMP Thu Mar 8 20:45:39 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux 问题也通过 3.0.0-16 验证)

以任一顺序包含 -lglut 和 -lpthread 都不能解决问题 如果不调用 glStuff 函数,程序将按预期运行

有人遇到过类似的问题吗?

#include <GL/glut.h>  
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <iostream>

using namespace std;


enum Error{WSASTARTUP,SOCKETCREATION,SOCKETBINDING,SOCKETLISTENING,SOCKETACCEPT};
void onError(Error err){
 std::cerr<<"error"<<err<<endl;
}


void* serverrun(void*){
 int mainSocket;
 int port=15002;
 struct sockaddr_in local;
 local.sin_family=AF_INET;
 local.sin_addr.s_addr=htonl(INADDR_ANY);
 local.sin_port=htons((u_short)port);
 mainSocket=socket(AF_INET,SOCK_STREAM,0);
 int val=1;
 setsockopt(mainSocket,SOL_SOCKET,SO_REUSEADDR,&val,sizeof(val));
 if(mainSocket<0){
  onError(SOCKETCREATION);  
}
if(bind(mainSocket, (struct sockaddr*)&local,sizeof(local))!=0)
{
  onError(SOCKETBINDING);
}
if(listen(mainSocket,10)!=0)
{
  onError(SOCKETLISTENING);
} 
struct sockaddr_in from;
socklen_t fromlen=sizeof(from);

while(true){
 int cs;
 cs=accept(mainSocket,(struct sockaddr*)&from,&fromlen);
 if (cs!=-1){
  std::cout<<"new client"<<std::endl;
 }else{
   onError(SOCKETACCEPT);
 }
}//while running
return NULL;
}//run

void drawGLScene(){}

void idleFunc(){}



void glStuff(int& argc,char** argv){
 glutInit(&argc, argv);  
 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);    
 glutInitWindowSize(100,100);  
 glutInitWindowPosition(0,0);
 glutCreateWindow("win");
 glutDisplayFunc(drawGLScene);      
 glutIdleFunc(idleFunc);
 glutMainLoop();
}

最佳答案

您似乎完全忽略了 errno,您看到的确切错误是什么?

如果是EINTR,你应该重试,这是完全正常的。

关于c++ - nvidia 驱动程序使套接字在接受时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10225249/

相关文章:

opengl - OpenGL 中的深度偏移

c++ - 如何排序 vector <pair<string , pair<int , int>>>?

c++ - 定义一个类的成员函数?

python - 在 Ubuntu 12.04 上使用 SQLAlchemy 查询时出现类型错误,但在 Windows 上则不然

python - 如果 "a.pyc"文件存在则删除 "a.py"文件

javascript - Node 命令不起作用

c++ - 解析的一些技巧

c++ - 在 C++ 和 Ncurses 中显示 % 符号

c++ - 读取DICOM文件到double-array,最简单的方法

c++ - 是否重用未定义的 glMapBufferRange 指针?