1
我的主要功能代碼如下所示不同的socket描述
if (argc < 2 || argc > 4)
{
printf("usage: server <port> [<ip>]\n");
exit(1);
}
TCPStream* stream = NULL;
TCPAcceptor* acceptor = NULL;
if (argc == 3)
{
acceptor = new TCPAcceptor(atoi(argv[1]), argv[2]);
}
else
{
acceptor = new TCPAcceptor(atoi(argv[1]));
}
if (acceptor->start() == 0)
{
while (1)
{
stream = acceptor->accept();
if (stream != NULL)
{
/*
ssize_t len;
char line[256];
while ((len = stream->receive(line, sizeof(line))) > 0) {
line[len] = 0;
printf("received - %s\n", line);
stream->send(line, len);
*/
cout << "in main" << stream->getsockdescriptor() << endl;
pthread_t sniffer_thread;
if(pthread_create(&sniffer_thread, NULL, connection_handler, (void*)&stream) < 0)
{
perror("could not create thread");
return 1;
}
//Now join the thread , so that we dont terminate before the thread
pthread_join(sniffer_thread , NULL);
}
delete stream;
}
}
exit(0);
}
和線程函數的代碼如下所示
void *connection_handler(void * args)
{
TCPStream *stream = (TCPStream *)args;
ssize_t len;
char line[256];
cout << "check1" << endl;
cout << stream->getsockdescriptor() << endl;
while ((len = stream->receive(line, sizeof(line))) > 0)
{
cout << "check2" << endl;
line[len] = 0;
printf("received - %s\n", line);
stream->send(line, len);
}
}
即使我傳遞的對象線程功能。我得到不同的文件描述符值。 在主它顯示correct.Start(),接受(),接收()的包裝函數
是的,我在pthread_create函數的第四個參數中刪除'&'。現在罰款 – user2357643
您還需要刪除演員。如果你沒有用void * cast關閉編譯器,你會看到編譯錯誤,而不是神祕的行爲。 – SergeyA