關於網路程式設計select小結

2021-07-03 23:20:00 字數 1325 閱讀 3420

描述符讀就緒情況:

1)套接字的讀緩衝大於低位標記so_recvnowat(預設為1)

2)   監聽套接字監聽到新的連線

3) 套接字接收到了fin訊號,read=0.

4) 套接字出錯,read = -1

描述符寫就緒情況:

1)套接字的寫緩衝大於低位標記so_sendnowat(預設為2048)

2) 套接字接收到了fin訊號,write=-1,errno= sigpipe。

3) 套接字出錯,write=-1

int main(int argc, char **argv)

//step 1

int listenfd = socket(af_inet, sock_stream,0);

_chkret(listenfd,socket);

struct sockaddr_in sockaddr, cliaddr;

bzero(&sockaddr,sizeof(sockaddr_in));

sockaddr.sin_port = htons(port);

sockaddr.sin_family = af_inet;

//inet_pton(af_inet,argv[1],sockaddr.sin_addr

sockaddr.sin_addr.s_addr = htonl(inaddr_any);

//step 2

ret = bind(listenfd,(struct sockaddr*)&sockaddr,sizeof(struct sockaddr));   

_chkret(ret,bind);

//step 3

ret = listen(sersock,5);

_chkret(ret,listen);

fd_set rset,allset;

fd_zero(&allset);

fd_set(listenfd, &allset);

maxfd = listenfd;

maxidx = 0;

char readbuf[1024], writebuf[1024];

//step 4

while (1)

}if (i == fd_size)

fd_set(clifd, &allset);

if (clifd > maxfd)

if (i > maxidx)

if (--nselect <= 0)

}for (int j = 0; j <=maxidx ; j++) else

}if (--nselect <= 0) }}

}

網路程式設計 select模型

select 機制中提供一fd set的資料結構,實際上是一long型別的陣列,每乙個陣列元素都能與一開啟的檔案控制代碼 不管是socket控制代碼,還是其他檔案或命名管道或裝置控制代碼 建立聯絡,建立聯絡的工作由程式設計師完成,當呼叫select 時,由核心根據io狀態修改fe set的內容,由此...

linux 網路程式設計 select

include include include include include include include include include include include include typedef struct st fd def 將fd接收套接字描述符放入到fd陣列中 int add f...

網路程式設計 select介紹

一 select函式簡介 select一般用在socket網路程式設計中,在網路程式設計的過程中,經常會遇到許多阻塞的函式,網路程式設計時使用的recv,recvfrom connect函式都是阻塞的函式,當函式不能成功執行的時候,程式就會一直阻塞在這裡,無法執行下面的 這是就需要用到非阻塞的程式設...