sockaddr_in
struct in_addr {
in_addr_t s_addr;
};
struct sockaddr_in {
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
struct sockaddr {
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
};
typedef int socklen_t;
typedef unsigned int size_t;
typedef int ssize_t;
TCP server/client
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
int main() {
int listenfd, connfd;
socklen_t clilen;
pid_t pid;
struct sockaddr_in servaddr, cliaddr;
char buf[1024] = {0};
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8000);
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(listenfd, 1024);
for (;;) {
clilen = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen);
if ((pid = fork()) == 0) {
close(listenfd);
sprintf(buf, "%d", getpid());
write(connfd, buf, sizeof(buf));
close(connfd);
return 0;
}
close(connfd);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
int main(int argc, char **argv) {
int i, sockfd;
struct sockaddr_in servaddr;
char buf[1024] = {0};
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
servaddr.sin_port = htons(8000);
for (i = 0; i < 5; ++i) {
sockfd = socket(AF_INET, SOCK_STREAM, 0);
connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
read(sockfd, buf, 1024);
printf("pid: %s\n", buf);
close(sockfd);
}
return 0;
}