在学习服务器开始时学长提出了一个有趣的问题
如何在不影响客户端与服务器的连通的情况下,更新服务器端的代码并且执行
感觉这个功能应该还是挺重要的,毕竟服务器如果频繁更新的话,每次更新时都让用户退出连接也太不友好了
我能想到的解决办法就是利用fork()函数
创建子进程重新执行server端代码,将server端与之连接的客户端套接字当做参数传递给子进程
然后结束父进程,子进程接收来自客户端的请求
server端代码
#include <iostream>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
using namespace std;
int main(int argc,char *argv[])
{
if(argc == 1) {
int fd = socket(AF_INET,SOCK_STREAM,0);
if(fd < 0) {
cout << "套接字申请失败" << endl;
exit(0);
}
struct sockaddr_in serv;
memset(&serv,0,sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_port = htons(5678);
serv.sin_addr.s_addr = htonl(INADDR_ANY);