Linux網路程式設計學習筆記(五)

2021-08-23 14:18:44 字數 1722 閱讀 1356

通過捕捉sigchld訊號捕捉殭屍程序,可解決多個子程序同時連線的情況

//伺服器端

#include #include #include #include #include #include #include #include #include void error_handling(char* message)

void handle_sigchld(int sig)

ssize_t readn(int fd,void* buf,size_t count)

}else if(nread==0) //對等方關閉

bufp+=nread;

nleft-=nread;

}return count;

} ssize_t written(int fd,const void* buf,size_t count)

}else if(nwritten==0)

continue;

bufp+=nwritten;

nleft-=nwritten;

}return count;

}ssize_t recv_peek(int sockfd,void* buf,size_t len)

}//因為readline()用recvpeek()封裝的,所以readline()只能用於套介面

ssize_t readline(int sockfd,void* buf,size_t maxline)

ssize_t readn(int fd,void* buf,size_t count)

}else if(nread==0) //對等方關閉

bufp+=nread;

nleft-=nread;

}return count;

} ssize_t written(int fd,const void* buf,size_t count)

}else if(nwritten==0)

continue;

bufp+=nwritten;

nleft-=nwritten;

}return count;

}ssize_t recv_peek(int sockfd,void* buf,size_t len)

}//因為readline()用recvpeek()封裝的,所以readline()只能用於套介面

ssize_t readline(int sockfd,void* buf,size_t maxline)

}nleft-=nread;

ret=readn(sockfd,bufp,nread);

if(ret<0)

error_handling("readline_readn");

bufp+=nread;

}return -1;

}

int main()

; char recvbuf[1024]=;

int n;

while(fgets(sendbuf,sizeof(sendbuf),stdin)!=null)

fputs(recvbuf,stdout);

memset(&sendbuf,0,sizeof(sendbuf));

memset(&sendbuf,0,sizeof(sendbuf));

}close(sock[i]);

}return 0;

}

Linux網路程式設計(五)

linux伺服器模型。udp伺服器通常採用迴圈伺服器模型,tcp伺服器通常採用併發伺服器模型 實現思路 伺服器建立偵聽socket,並建立子程序。所有子程序呼叫accept,無連線時將睡眠。有連線到來時所有子程序被喚醒。某乙個子程序接受連線後,其他程序繼續睡眠。乙個預先建立子程序的例子。create...

Linux網路程式設計學習筆記 索引

一 linux基本知識 學習筆記 linux平台的檔案i o操作 學習筆記 linux平台的檔案,目錄及操作 linux學習筆記 標準輸入輸出 linux學習筆記 程序概念及控制 linux學習筆記 訊號處理 二 程序間通訊 三 傳輸層協議tcp和udp 四 tcp套接字 五 udp資料報 六 套接...

linux網路程式設計筆記

以下是對我之前學習的linux網路程式設計的一些筆記。int socket int domain,int type,int protocol type這個引數,可以加上乙個 sock nonblock,把套接字設定為非阻塞,保證這一設定的原子性。int listen int sockfd,int b...