看了《TCP/IP网络编程》,想把P399页的基于Linux的多线程Web服务器用C++重写一下,现在先只将.c改为.cpp编译,遇到的问题如下:
1、accept函数中需要用socklen_t*代替int*;
clnt_sock = accept(serv_sock, (struct sockaddr *)&clnt_adr, (socklen_t*)&clnt_adr_size);
2、C++中返回值为 void* 的函数不能 return;会报错,所以改成return nullptr;
3、 用g++编译要加上-lpthread ,否则会出现undefined reference to `pthread_create';
4、(void*)&clnt_sock 代替 &clnt_sock;
pthread_create(&t_id, NULL, request_handler, (void*)&clnt_sock);
5、因为用的还是C库函数,所以要运行就要string转为char*;
char* strTochar(string s){
char *data;
int len = s.length();
data = (char *)malloc((len+1)*sizeof(char));
s.copy(data,len,0);
return data;
}
最终编译成功的代码如下:
#include <stdio.h>
#include <stdlib.h>
#includ