You need to pass a valid pointer to recvfrom. (unsigned int *)sizeof(struct sockaddr_in)
is not a valid pointer.
Change
if(recvfrom(socket_fd, buffer, 2, 0, (struct sockaddr*)&dest_addr,
(unsigned int *)sizeof(struct sockaddr_in) == -1)
to e.g.
socklen_t len = sizeof dest_addr;
if(recvfrom(socket_fd, buffer, 2, 0,
(struct sockaddr*)&dest_addr, &len) == -1)
You are also constructing an invalid array that you send, Your array has a length of 1, but you tell sendto/recvfrom that it has a length of 2. So change
char buffer[1] = "s";
to
char buffer[] = "s";
(The string "s" is the character 's' and a 0 byte, so buffer
will have length 2 in the latter case.)