python select實現非阻塞socket - liukeforever的專欄 - 部落格頻道 - csdn.net
分類: python
2011-10-19 11:08
690人閱讀收藏
舉報[python]view plain
copy
?
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import socket
import select
host = ""
port = 50000
s = socket.socket(socket.af_inet,socket.sock_stream)
s.bind((host,port))
s.listen(5)
"begin..."
while
1:
infds,outfds,errfds = select.select([s,],,,5)
# 如果infds狀態改變,進行處理,否則不予理會
if len(infds) != 0:
clientsock,clientaddr = s.accept()
infds_c,outfds_c,errfds_c = select.select([clientsock,],,,3)
if len(infds_c) != 0:
buf = clientsock.recv(8196)
if len(buf) != 0:
print (buf)
clientsock.close()
"clientsock closed"
"no data coming"
在綱絡上看到的一篇文章, 介紹python的socket非阻塞式#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import socket
import select
host = ""
port = 50000
s = socket.socket(socket.af_inet,socket.sock_stream)
s.bind((host,port))
s.listen(5)
print "begin..."
while 1:
infds,outfds,errfds = select.select([s,],,,5)
# 如果infds狀態改變,進行處理,否則不予理會
if len(infds) != 0:
clientsock,clientaddr = s.accept()
infds_c,outfds_c,errfds_c = select.select([clientsock,],,,3)
if len(infds_c) != 0:
buf = clientsock.recv(8196)
if len(buf) != 0:
print (buf)
clientsock.close()
print "clientsock closed"
print "no data coming"
在原來的程式碼基礎上改了一下,增加了乙個select使用了兩個select,
第乙個select充許多個client來connect,如果過了5秒還沒有client來connect顯示 "no data coming"
第二個select是如果client connect過來, 過了3秒還沒有傳送message則直接close, 不會造成阻塞
python select實現非阻塞socket
python select實現非阻塞socket 郭猛的個人空間 開源中國社群 python select實現非阻塞socket usr bin env python encoding utf 8 import socket import select host port 50000 s socke...
Python select模組簡單理解與使用
select 的機制中提供一fd set的資料結構,實際上是一long型別的陣列,每乙個陣列元素都能與一開啟的檔案控制代碼 不管是socket控制代碼,還是其他檔案或命名管道或裝置控制代碼 建立聯絡,建立聯絡的工作由程式設計師完成,當呼叫select 時,由核心根據io狀態修改fd set的內容,由...
Socket實現非阻塞連線
include include include include pragma comment lib,ws2 32.lib define time out time 20 connect超時時間20秒 void geturl char url socket sockfd struct sockadd...