We won't be able to discuss all system calls related to networking. However, we shall examine the basic ones, namely those needed to send a UDP datagram.
In most Unix-like systems, the User Mode code fragment that sends a datagram looks like the following:
int sockfd; /* socket descriptor */
struct sockaddr_in addr_local, addr_remote; /* IPv4 address descriptors */ const char *mesg = "Hello, how are you?";
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
addr_local.sin_family = AF_INET; addr.sin_port = htons(50000);
addr.sin_addr.s_addr = htonl(0xc0a050f0); /* 22.214.171.124 */ bind(sockfd, (struct sockaddr *) & addr_local, sizeof(struct sockaddr_in));
addr_remote.sin_family = AF_INET; addr_remote.sin_port = htons(49152);
inet_pton(AF_INET, "126.96.36.199", &addr_remote.sin_addr);
connect(sockfd, (struct sockaddr *) &addr_remote, sizeof(struct sockaddr_in)); write(sockfd, mesg, strlen(mesg)+1);
Obviously, this listing does not represent the complete source code of the program. For instance, we have not defined a main( ) function, we have omitted the proper #include directives for loading the header files, and we have not checked the return values of the system calls. However, the listing includes all network-related system calls issued by the program to send a UDP datagram.
Let's describe the system calls in the order the program uses them.
Was this article helpful?