我需要有一個插座(或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