2012-04-19 11 views
0

ここにはglutとpthreadsを使用するプログラムのコンパイル抽出があります。 NVIDIAドライバのバージョン295でnvidiaドライバは受け入れ時にソケットが失敗するようにします

TCPが中断受け入れるときglutmainloopを開始する(プログラムがエラーを報告し4)、バージョン275と

は、プログラムが正常に動作します。

含む(Ubuntuの、3.0.0-17-ジェネリック#30-UbuntuのSMP木3月8日午後8時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(); 
} 
+2

エラーを印刷するときは、独自のエラーコードだけを使用しないでください。また、 'errno'の値を表示してください。これは、エラーが実際に何であるかを示します。 –

答えて

3

あなたは完全にerrnoを無視しているように見える、あなたが見る正確なエラーは何ですか?

EINTRの場合は、正常に再試行する必要があります。

+0

ありがとうございました!私はEINTRを取得していましたが、errnoがEINTRで問題を修正している間にループしました。 –