MES3.0はLinuxの下位互換性であり、MES3.0のユーザープログラムは原則としてLinuxでも同じソースコードで動作します。
以下、MES3.0で動作確認されたLinuxとソースコード互換のUDPサーバの例です。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
int sock, len;
struct sockaddr_in addr;
struct sockaddr_in senderinfo;
socklen_t addrlen;
char buf[64], senderstr[INET_ADDRSTRLEN];
int n;
struct timeval tv;
sock = socket(AF_INET, SOCK_DGRAM, 0);
getsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, &len);
printf("%ld %ld\n", tv.tv_sec, tv.tv_usec);
tv.tv_sec = 12;
tv.tv_usec = 0;
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sock, (struct sockaddr *)&addr, sizeof(addr));
memset(buf, 0, sizeof(buf));
addrlen = sizeof(senderinfo);
n = recvfrom(sock, buf, sizeof(buf) - 1, 0, (struct sockaddr *)&senderinfo, &addrlen);
if(n > 0) {
inet_ntop(AF_INET, &senderinfo.sin_addr, senderstr, sizeof(senderstr));
printf("recvfrom : %s, port=%d\n", senderstr, ntohs(senderinfo.sin_port));
} else {
printf("Timeout.\n");
}
close(sock);
return 0;
}