gpt4 book ai didi

python - 没有发送(或接收)队列的 Unix Socket

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:03 28 4
gpt4 key购买 nike

我有一对用 C 和 Python 编写的发送方/接收方代码。客户端正在生成数据并通过 unix 套接字将其发送到接收方。接收器并不总是监听套接字,因为它应该对接收到的数据做一些事情。

在我当前的代码中,发送方发送的所有消息都在队列中等待接收方接收,但我不希望出现这种情况。我想让发件人知道收件人现在很忙(甚至可能通过引发错误)。那么如何将接收者的队列长度设置为零呢?

请考虑我不希望发送或接收过程被阻塞。

我的接收者和发送者部分代码是这些:

接收器(在 Python 中):

self.app_socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
self.app_socket.settimeout(0.01)
self.app_socket.bind(APP_SOCKET)

def poll(self, *args):
try:
message = self.app_socket.recv(1024)
except socket.timeout:
return

发件人(在 C 中):

int openSocket(char *path)
{
int sock;
struct sockaddr_un addr;
int size;

sock = socket(AF_UNIX, SOCK_DGRAM, 0);
if (sock < 0)
exit (EXIT_FAILURE);

addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, path);
size = strlen(addr.sun_path) + sizeof(addr.sun_family);

if (connect(sock, (struct sockaddr *) &addr, size) < 0)
return -1;

return sock;
}

int sendMessage(int sock, unsigned char *message, int length)
{
int count;

count = send(sock, message, length, 0);
if (count < 0)
return -1;

return count;
}

最佳答案

您无法在发送方知道接收方发生了什么。可能现在甚至没有安排接收进程。唯一合理的方法是从接收方回复发送方,在这里您可以等待此应答的超时时间并决定接收方是否忙。

关于python - 没有发送(或接收)队列的 Unix Socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25682810/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com