关于socket的ioctl传入参数的问题

来源:13-2 搭建服务基本框架

sd1700092

2021-01-18

老师你好。我是windows环境,但是self.sock.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)在编译器里会被提示:option参数不能只填socket.RCVALL_ON要传一个Tuple(Int, Int, Int)类型的参数……
不知道为什么你不报错呢?我是Python 3.7的

写回答

2回答

sd1700092

提问者

2021-01-21

老师请看

//img.mukewang.com/szimg/6009288009b6332d09600388.jpg

代码就是如图这样的,

# -*-coding:utf-8-*-
import socket

class Server:
   def __init__(self):
       self.sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
       self.ip = ''
       self.port = 8888
       self.sock.bind((self.ip, self.port))
       # 混杂模式
       self.sock.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
       print(f'{self.ip}')

Pycharm的Python Interpreter也是Python 3.7的:

//img1.sycdn.imooc.com/szimg/600928af0927224612600581.jpg

0
1
咚咚呛
是的,老师也是这样写的,需要注意的是,ioctl是Windows下的系统调用函数,后面的参数是可选的options参数,所以这个写法是可以运行的,只不过PyCharm会提示完整的参数传递方式,像老师的演示里面,也同样有波浪线的提醒,但是是不影响运行的。
2021-01-21
共1条回复

咚咚呛

2021-01-20

可以把你的源码贴一下吗?我看看。

0
1
sd1700092
老师我回复了,还是这个帖子,在另一层里
2021-01-21
共1条回复

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程