我正在尝试编写一个非常简单的 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;
}
如果我注释掉使用连接/发送的 2 行,似乎可以工作。但是使用 send_to 的行失败并出现以下错误。
在抛出 'boost::exception_detail::clone_impl >' 的实例后调用终止 what(): Bad file descriptor Aborted
感谢您提供的所有帮助。