gpt4 book ai didi

C++ 使用 send_to 提升 unix 域套接字

转载 作者:太空狗 更新时间:2023-10-29 21:26:48 24 4
gpt4 key购买 nike

我正在尝试编写一个非常简单的 unix 域数据报客户端/服务器。

这是 python 服务器:

import socket,os

s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
try:
os.remove("/tmp/socketname")
except OSError:
pass
s.bind("/tmp/socketname")
while 1:
data = s.recv(1024)
print data

conn.close()

这是一个 python 客户端,它似乎与服务器一起工作得很好

import socket
import time

sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
sock.sendto('Hello, world', "/tmp/socketname")
sock.close()

这个练习的目的是使用 boost::asio 网络库,python 代码只是通过一个简单的客户端来简化服务器以证明(-ish)服务器正在工作。

我在使用 C++ 客户端时遇到一些问题:

#include <boost/asio.hpp>

int
main(void)
{
const pid_t pid = getpid();
boost::asio::io_service my_service;
const boost::asio::local::datagram_protocol::endpoint ep("/tmp/socketname");
boost::asio::local::datagram_protocol::socket my_sock(my_service);

//my_sock.connect(ep);
//my_sock.send(boost::asio::buffer(&pid, sizeof(pid)));
my_sock.send_to(boost::asio::buffer(&pid, sizeof(pid)), ep);

return 0;
}

如果我注释掉使用 connect/send 的 2 行,则似乎可以正常工作。但是使用 send_to 的行失败并出现以下错误。

在抛出“boost::exception_detail::clone_impl >”实例后调用终止 what(): 错误的文件描述符中止

感谢您提供的所有帮助。

最佳答案

您从未通过调用 open() 或任何其他自动打开套接字的方法(例如 connect())打开套接字。

int
main(void)
{
const pid_t pid = getpid();
boost::asio::io_service my_service;
const boost::asio::local::datagram_protocol::endpoint ep("/tmp/socketname");
boost::asio::local::datagram_protocol::socket my_sock(my_service);

//my_sock.connect(ep);
//my_sock.send(boost::asio::buffer(&pid, sizeof(pid)));
my_sock.open();
my_sock.send_to(boost::asio::buffer(&pid, sizeof(pid)), ep);

return 0;
}

关于C++ 使用 send_to 提升 unix 域套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524003/

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