我需要有一个插座(或IPC的其他方法)与以下行为:如何制作“粗心”套接字?
作家需要能够发送 数据套接字但没有阻挡
如果没有人听中, 数据被丢弃
像往常一样,读者需要能够 连接并收到这些数据
我做了什么:
创造了一个通过调用
sock = socket (PF_LOCAL, SOCK_DGRAM, 0); //sock is an integer
与
struct sockaddr_un name;
memset(&name,0,sizeof(struct sockaddr_un));
name.sun_family = AF_LOCAL;
strncpy (name.sun_path, filename, sizeof (name.sun_path)); //filename contains "/cosmos"
bind (sock, (struct sockaddr *) &name, sizeof(struct sockaddr_un));
绑定它停飞然后在其上
struct pollfd pld;
pld.events = POLLOUT;
pld.fd = sock;
pld.revents=0;
//in loop
poll(&pld,1,50);
if(pld.revents & POLLOUT)
write(fr,mydata,19);
跟踪outputshows做了民意调查那令状e被执行(重复)。 要在它听我这样做:
struct sockaddr_un cos_name;
int cosmos;
char buffer[100];
memset(&cos_name,0,sizeof(struct sockaddr_un));
strncpy (cos_name.sun_path, COSMOS_SOCKET, sizeof (cos_name.sun_path));
memset(buffer,0,100);
cosmos = socket (PF_LOCAL, SOCK_DGRAM, 0);
//check on cosmos being 0
if (connect(cosmos,(struct sockaddr*) &cos_name, sizeof(struct sockaddr_un)) != 0)
{
printf("Connecting failed: %s.\n",strerror(errno));
return;
}
printf("Listening successfully started.\n");
//loop
{
read(cosmos,buffer,100);
printf("Recieved: %s.\n",buffer);
}
然而,“收到......”从不打印。
什么需要更改以实现所需的功能? 最后一个循环的条款应该是什么? (我正在使用一个简单的“现在运行1000次”)。
所以。 a)绑定接收端而不是连接b)使用sendto()和recvfrom()而不是读写? 立即尝试。 – Srv19 2011-04-18 17:11:09
但你刚才描述了一个连接。建立双向通信,其中服务器a)等待客户端的请求到达b)根据收到的信息向他发送数据。 这不是我所问过的。 – Srv19 2011-04-18 20:31:20
有*无*连接。什么都没有建立。您正在使用UDP。这涵盖了你的问题中的1)和2)。 3)取决于你如何实现这一点。没有“连接”,所以客户端真的只是发送一个请求,服务器会回复。你不知道是否任何一方接收到消息,当然......因为你使用的是UDP。你需要围绕这个建立逻辑。 – 2011-04-18 20:34:48