我的程序建立一个HTTP服务器。调用listen()accept()之后,如何读取这样的GET请求:

GET /path HTTP/1.1\r\n\r\n

最佳答案

假设您正在使用阻塞套接字,首先需要知道是否有数据可读取。您可以使用select api进行操作。
下一步接受将一个套接字FD返回给您。使用该套接字FD,您可以接收数据。

接受代码示例

struct sockaddr_in client_addr;
int addr_len;
int new_fd;

addr_len = sizeof(struct sockaddr_in);
new_fd =  accept(socket_fd, (struct sockaddr *)&client_addr,(socklen_t *)&addr_len);


选择并阅读示例

struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 100;
ret_value = select(max_fd + 1, READ_FD_SETS, NULL , NULL , &timeout);

if ((ret_value <= 0) && (errno!=EINTR))
{
  //error
}
else
{
   //read data now
   rc = recv(new_fd, buffer, buffer length, 0)
}


注意:如果要获得更好的性能,您可能希望在epoll插槽上进行研发。

关于c - 如何从客户端C读取GET请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31900473/

10-10 13:49
查看更多