diff --git a/examples/interop_1_socket/main.c b/examples/interop_1_socket/main.c new file mode 100644 index 0000000000000000000000000000000000000000..eaa341e83dfeb3fd70ecb053dd46d5028c0652ac --- /dev/null +++ b/examples/interop_1_socket/main.c @@ -0,0 +1,35 @@ +/* This example demonstrates: +- conventional UDP socket API can be used in a connection-oriented fashion + - first setup with `bind` and `connect` + - henceforth communicating with connected peer using `send` and `recv` in blocking mode. +*/ +#include // definies socketaddr_in +#include // defines printf +#include // defines malloc, free +#include // defines close +#include // defines inet_addr +#define BUFSIZE 512 +int main() { + // --- setup --- + struct sockaddr_in addrs[2]; + addrs[0].sin_family = AF_INET; + addrs[0].sin_port = htons(8000); + inet_pton(AF_INET, "127.0.0.1", &addrs[0].sin_addr.s_addr); + addrs[1].sin_family = AF_INET; + addrs[1].sin_port = htons(8001); + inet_pton(AF_INET, "127.0.0.1", &addrs[1].sin_addr.s_addr); + int fd = socket(AF_INET, SOCK_DGRAM, 0); + bind(fd, (const struct sockaddr *)&addrs[0], sizeof(addrs[0])); + connect(fd, (const struct sockaddr *)&addrs[1], sizeof(addrs[1])); + // --- communication --- + char * buffer = malloc(BUFSIZE); + size_t msglen, i; + msglen = recv(fd, (void *)buffer, BUFSIZE, 0); + for(i=0; i