内容简介:翻译自:https://stackoverflow.com/questions/18041735/oserror-errno-22-invalid-argument-in-python3-socket
我在 Python
3中遇到套接字编程问题.我得到一个异常,它不会导致程序崩溃,但只是在终端中显示.
这是我的代码:
from PyQt4 import QtCore, QtGui from imigui import Ui_MainWindow class imiserv(QtGui.QMainWindow): send_msg = pyqtSignal('QString', 'QString') def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.Sport_lineEdit.setMaxLength(5) self.ui.Sconnect_pushButton.clicked.connect(self.serv) self.send_msg.connect(self.write_msg) def write_msg(self, lbl_msg= None, txt_msg= None): if lbl_msg: self.ui.C_label.setText(lbl_msg) if txt_msg: self.ui.Clog_textEdit.setText(txt_msg) def serv(self): MY_LOCK = threading.Lock() class CountT(threading.Thread): def __init__(self, parent): threading.Thread.__init__(self) self._parent= parent def run(self): MY_LOCK.acquire() self._parent.send_msg.emit("Waiting connections","") while True: cliconn, (addr, remoport)= self._parent.clis.accept() clirecmsg= str(cliconn.recv(1024) self._parent.send_msg.emit("{0}:{1} is connected.".format(addr, remoport), "{0}:{1}".format(addr, remoport) cliconn.close() MY_LOCK.release() try: self.clis= socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.clis.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) clierhost= str(self.ui.Sip_lineEdit.text()) clierport= int(self.ui.Sport_lineEdit.text()) self.clis.bind((clierhost, clierport)) self.clis.listen(5) a= CountT(self) a.daemon= True a.start() except socket.error as err: err= str(err) print(err)
以下是发生的交叉错误(此错误仅在 linux 操作系统中显示):
Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python3.3/threading.py", line 637, in _bootstrap_inner self.run() File "imiclilap.py", line 34, in run cliconn, (addr, remoport)= self._parent.clis.accept() File "/usr/lib/python3.3/socket.py", line 135, in accept fd, addr = self._accept() OSError: [Errno 22] Invalid argument Exception in thread Thread-2: Traceback (most recent call last): File "/usr/lib/python3.3/threading.py", line 637, in _bootstrap_inner self.run() File "imiclilap.py", line 34, in run cliconn, (addr, remoport)= self._parent.clis.accept() File "/usr/lib/python3.3/socket.py", line 135, in accept fd, addr = self._accept() OSError: [Errno 22] Invalid argument
Errorno 22是一个linux错误,定义为“无效参数”,因此可能您的地址或端口不是正确的类型.检查一下
addr, remoport
分别是string,int.
它也可能已经绑定到不同线程中的套接字.
您可以在strace 1 中运行您的程序,以便您可以查看正在使用的套接字以及是否存在一些双重绑定.
也只是一个fyi:
您的程序没有崩溃,因为错误发生在一个单独的线程中,因此线程崩溃但您的主线程仍在运行.
翻译自:https://stackoverflow.com/questions/18041735/oserror-errno-22-invalid-argument-in-python3-socket
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 《UNIX网络编程》笔记 - 套接字选项/UDP套接字
- Asio:创建被动套接字
- UNP 学习笔记——套接字选项
- 原始套接字打造 ping 命令
- UNP 学习笔记——套接字编程简介
- c# – 配置套接字ACK超时?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。