This commit is contained in:
Miloslav Ciz 2024-05-28 21:17:58 +02:00
parent 6b6fe66cd4
commit 6e8181c3e8
7 changed files with 1799 additions and 1786 deletions

View file

@ -8,6 +8,7 @@ First let's try writing some **UDP** C program under [Unix](unix.md). Remember t
```
#include <stdio.h>
#include <stdlib.h> // for exit
#include <unistd.h> // for sleep
#include <arpa/inet.h>
@ -20,17 +21,14 @@ First let's try writing some **UDP** C program under [Unix](unix.md). Remember t
char buffer[BUFFER_LEN + 1]; // extra space for zero terminator
char name; // name of this agent (single char)
int sockIn = -1, sockOut = -1; // receive/send socket file descriptors
int sock = -1; // socket, for both sending and receiving
void error(const char *msg)
{
printf("%c: ERROR, %s\n",name,msg);
if (sockIn >= 0)
close(sockIn);
if (sockOut >= 0)
close(sockOut);
if (sock >= 0)
close(sock);
exit(1);
}
@ -47,27 +45,22 @@ int main(int argc, char **argv)
struct sockaddr_in addrSrc, addrDst;
sockIn = socket(AF_INET,SOCK_DGRAM | SOCK_NONBLOCK,IPPROTO_UDP);
sock = socket(AF_INET,SOCK_DGRAM | SOCK_NONBLOCK,IPPROTO_UDP);
if (sockIn < 0)
error("couldn't create listen socket");
sockOut = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (sockOut < 0)
error("couldn't create send socket");
if (sock < 0)
error("couldn't create socket");
addrSrc.sin_family = AF_INET;
addrSrc.sin_port = htons(portSrc);
addrSrc.sin_port = htons(portSrc); // convert port to netw. endianness
addrSrc.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockIn,(struct sockaddr *) &addrSrc,sizeof(addrSrc)) < 0)
error("couldn't bind listen socket");
if (bind(sock,(struct sockaddr *) &addrSrc,sizeof(addrSrc)) < 0)
error("couldn't bind socket");
addrDst.sin_family = AF_INET;
addrDst.sin_port = htons(portDst);
if (inet_aton(addrStrDst,&addrDst.sin_addr) == 0)
if (inet_aton(addrStrDst,&addrDst.sin_addr) == 0)
error("couldn't translate address");
printf("%c: My name is %c, listening on port %d, "
@ -78,7 +71,7 @@ int main(int argc, char **argv)
{
printf("%c: Checking messages...\n",name);
int len = recv(sockIn,buffer,BUFFER_LEN,0);
int len = recv(sock,buffer,BUFFER_LEN,0);
if (len > 0)
{
@ -93,7 +86,7 @@ int main(int argc, char **argv)
printf("%c: Sending \"%s\"\n",name,buffer);
if (sendto(sockOut,buffer,BUFFER_LEN,0,
if (sendto(/*sockOut*/sock,buffer,BUFFER_LEN,0,
(struct sockaddr *) &addrDst,sizeof(addrDst)) < 0)
printf("%c: Couldn't send it!\n",name);
@ -103,8 +96,7 @@ int main(int argc, char **argv)
printf("%c: That's enough, bye.\n",name);
close(sockIn);
close(sockOut);
close(sock);
return 0;
}