如何检测客户端何时与UDS断开连接(Unix域套接字)

怪胎报废

当客户端连接到管道并发送数据时,我可以收到罚款,并且可以继续接收数据。当客户端断开连接且while循环仍处于活动状态时,就会出现麻烦,connection.recv()不会阻塞,因此会不断疯狂地循环!因此,我需要一种方法来检测客户端是否仍处于连接状态。

我有以下代码:

    pipe = './pipes/uds_defzone-lrecv'

    try:
        os.unlink(pipe)
    except OSError:
        if os.path.exists(pipe):
            raise
    self.logger.debug('Created UDS pipe: ' + pipe)

    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.bind(pipe)
    sock.listen(1)

    self.logger.debug('Waiting for connection: ' + pipe)
    connection, client_address = sock.accept()
    self.logger.debug('Connection from: ' + client_address)

    while True:

        self.logger.debug('Waiting for data')
        data = connection.recv(4096)
        self.logger.debug('Received: ' + str(data))

供参考,sender.py代码:

# Create a UDS socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)

# Connect the socket to the port where the server is listening
pipe = './pipes/uds_defzone-lrecv'

logger.debug('connecting to: ' + pipe)

try:
    sock.connect(pipe)
except socket.error, msg:
    logger.debug(msg)
    sys.exit(1)

try:
    message = 'THIS IS A TEST'
    logger.debug('sending: ' + message)
    sock.sendall(message)
    time.sleep(2)

finally:
    logger.debug('closing socket')
    sock.close()

TIA!

更新

我可以用下面的代码放慢速度,但不完全是我想要的。

    while True:

        try:
            self.logger.debug('Waiting for data')
            data_present = select.select([sock], [], [], 30)
            if data_present[0]:
                data = connection.recv(4096)
                self.logger.debug('Received: ' + data)
        except select.timeout:
            pass

更新2

作为参考,这是我想出的代码:

        while True:

            logger.debug('Waiting for data')
            data = connection.recv(4096)
            if not data == '':
                logger.debug('Received: ' + data)
            else:
                logger.debug('Nothing received')
                break

我在此过程中遇到的黑客...在客户端可以发送空数据以表示信号的合法情况下,可以使用吗?

        while True:

            try:
                logger.debug('Waiting for data')
                data = connection.recv(4096)
                # *** This throws an exception when client has disconnected
                x = connection.getpeername()
                logger.debug('Received: ' + data)
            except:
                logger.debug('Client disconnected')
                break
斯蒂芬·乌尔里希(Steffen Ullrich)

connection.recv()不会阻塞,因此会不断疯狂循环!因此,我需要一种方法来检测客户端是否仍处于连接状态。

如果对等方断开连接,则recv数据将返回空数据('')。您需要检查并退出循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何检测客户端何时与UDS断开连接(Unix域套接字)

来自分类Dev

Web套接字:无法在Internet断开连接上检测到客户端连接

来自分类Dev

检测断开的客户端套接字连接(跨平台适用性)

来自分类Dev

如何使服务器套接字广播到那里,并让客户端套接字检测并连接

来自分类Dev

如何检测Boost Tcp套接字何时断开连接

来自分类Dev

客户端突然断开连接后,如何使服务器套接字保持活动状态?

来自分类Dev

如何在Ruby中检测断开的Unix域套接字?

来自分类Dev

是否保证php的socket_select()能够检测所有客户端套接字断开连接?

来自分类Dev

客户端断开连接时,服务器不会删除/断开套接字

来自分类Dev

如何识别连接到AF_UNIX套接字的客户端?

来自分类Dev

如何识别连接到AF_UNIX套接字的客户端?

来自分类Dev

如何使服务器套接字广播在那里,并让客户端套接字检测并连接

来自分类Dev

检测客户端断开连接

来自分类Dev

Delphi 7-当客户端套接字突然断开连接时,如何删除Listview项目标题

来自分类Dev

断开与错误的客户端连接:客户端套接字写入错误:管道损坏-乘客5.0.2

来自分类Dev

套接字客户端连接

来自分类Dev

客户端套接字连接被拒绝

来自分类Dev

检查PHP套接字服务器中的断开连接客户端

来自分类Dev

客户端断开连接后,套接字isClosed()返回false

来自分类Dev

识别套接字客户端中的远程断开连接

来自分类Dev

Python 3.5.1-Asyncio-检查套接字客户端是否已断开连接

来自分类Dev

2分钟后,Python套接字客户端断开连接

来自分类Dev

断开node.js中以前的客户端socket.io套接字的连接

来自分类Dev

检查PHP套接字服务器中的断开连接客户端

来自分类Dev

客户端断开连接后,C 套接字 TCP 服务器出现故障

来自分类Dev

Linux:TCP 套接字侦听:如何检测无法关闭套接字的客户端?

来自分类Dev

UNIX域套接字C ++服务器无法将数据返回给客户端

来自分类Dev

Unix域套接字C服务器和Python客户端

来自分类Dev

Java套接字处理客户端断开连接

Related 相关文章

  1. 1

    如何检测客户端何时与UDS断开连接(Unix域套接字)

  2. 2

    Web套接字:无法在Internet断开连接上检测到客户端连接

  3. 3

    检测断开的客户端套接字连接(跨平台适用性)

  4. 4

    如何使服务器套接字广播到那里,并让客户端套接字检测并连接

  5. 5

    如何检测Boost Tcp套接字何时断开连接

  6. 6

    客户端突然断开连接后,如何使服务器套接字保持活动状态?

  7. 7

    如何在Ruby中检测断开的Unix域套接字?

  8. 8

    是否保证php的socket_select()能够检测所有客户端套接字断开连接?

  9. 9

    客户端断开连接时,服务器不会删除/断开套接字

  10. 10

    如何识别连接到AF_UNIX套接字的客户端?

  11. 11

    如何识别连接到AF_UNIX套接字的客户端?

  12. 12

    如何使服务器套接字广播在那里,并让客户端套接字检测并连接

  13. 13

    检测客户端断开连接

  14. 14

    Delphi 7-当客户端套接字突然断开连接时,如何删除Listview项目标题

  15. 15

    断开与错误的客户端连接:客户端套接字写入错误:管道损坏-乘客5.0.2

  16. 16

    套接字客户端连接

  17. 17

    客户端套接字连接被拒绝

  18. 18

    检查PHP套接字服务器中的断开连接客户端

  19. 19

    客户端断开连接后,套接字isClosed()返回false

  20. 20

    识别套接字客户端中的远程断开连接

  21. 21

    Python 3.5.1-Asyncio-检查套接字客户端是否已断开连接

  22. 22

    2分钟后,Python套接字客户端断开连接

  23. 23

    断开node.js中以前的客户端socket.io套接字的连接

  24. 24

    检查PHP套接字服务器中的断开连接客户端

  25. 25

    客户端断开连接后,C 套接字 TCP 服务器出现故障

  26. 26

    Linux:TCP 套接字侦听:如何检测无法关闭套接字的客户端?

  27. 27

    UNIX域套接字C ++服务器无法将数据返回给客户端

  28. 28

    Unix域套接字C服务器和Python客户端

  29. 29

    Java套接字处理客户端断开连接

热门标签

归档