【代码1】test_gethostbyname.c
#include "header.h"
extern int h_errno;
int main(int argc, char *argv[])
{
if (2 > argc) {
fprintf(stderr, "Usage : %s + hostname\n", argv[0]);
exit(1);
}
struct hostent *host;
if (NULL == (host = gethostbyname(argv[1]))) {
fprintf(stderr, "gethostbyname : %s\n", strerror(h_errno));
exit(1);
}
printf("offical host name is %s\n", host->h_name);
char **alias;
printf("alias list : \n");
for (alias = host->h_aliases; *alias; alias++)
printf("%s\n", *alias);
printf("addr list : \n");
for (alias = host->h_addr_list; *alias; alias++)
printf("%s\n", inet_ntoa(*(struct in_addr *)*alias));
exit(0);
}
【代码2】test_gethostname.c
#include "header.h"
int main(int argc, char *argv[])
{
char name[65];
memset(name, 0, sizeof(name));
if (0 > gethostname(name, sizeof(name)))
err_exit("gethostname");
printf("host name is %s\n", name);
exit(0);
}
【代码3】test_multicast_receiver.c
#include "header.h"
int main(int argc, char *argv[])
{
int sockfd = -1;
if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, 0)))
err_exit("socket");
struct ip_mreqn mreqn;
memset(&mreqn, 0, sizeof(mreqn));
mreqn.imr_multiaddr.s_addr = inet_addr("224.12.34.56"); /* IP multicast group address */
mreqn.imr_address.s_addr = htonl(INADDR_ANY); /* IP address of local interface */
mreqn.imr_ifindex = 0; /* interface index */
if (0 > setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreqn, sizeof(mreqn)))
err_exit("setsockopt");
struct sockaddr_in myself;
memset(&myself, 0, sizeof(myself));
myself.sin_family = AF_INET;
myself.sin_port = htons(20000);
myself.sin_addr.s_addr = inet_addr("0");
if (0 > bind(sockfd, (struct sockaddr *)&myself, sizeof(myself)))
err_exit("bind");
char buf[BUFSIZ];
while(1) {
recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);
printf("%s", buf);
fflush(stdout);
}
exit(0);
}
【代码4】test_multicast_sender.c
#include "header.h"
int main(int argc, char *argv[])
{
int sockfd = -1;
if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, 0)))
err_exit("socket");
struct sockaddr_in receiver;
memset(&receiver, 0, sizeof(receiver));
receiver.sin_family = AF_INET;
receiver.sin_port = htons(20000);
receiver.sin_addr.s_addr = inet_addr("224.12.34.56");
char buf[BUFSIZ];
while(1) {
fgets(buf, sizeof(buf), stdin);
sendto(sockfd, buf, strlen(buf) + 1, 0, (struct sockaddr *)&receiver, sizeof(receiver));
}
exit(0);
}
【代码5】test_sigaction.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
void handler(int signum)
{
alarm(2);
printf("in handler...\n");
return ;
}
int main(int argc, char *argv[])
{
struct sigaction act;
char buf[30];
sigaction(SIGALRM, NULL, &act);
act.sa_handler = handler;
act.sa_flags &= ~SA_RESTART;
//act.sa_flags |= SA_RESTART;
sigaction(SIGALRM, &act, NULL);
while(1) {
alarm(2);
if (NULL == fgets(buf, 30, stdin)) {
fprintf(stderr, "fgets : %s\n", strerror(errno));
fprintf(stderr, "you do not input in 2 seconds\n");
} else {
printf("input : %s\n", buf);
}
}
return 0;
}