#include #include #include #include #include #include #include #include "basiliskif.h" #define PORT 6066 //default BasiliskII network poer int sock; int basiliskIfInit() { //Make socket sock=socket(AF_INET, SOCK_DGRAM, 0); if (socket<0) { printf("Couldn't create socket\n"); return 0; } int broadcastEnable=1; setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable)); int reuse=1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); struct sockaddr_in si; memset((char *) &si, 0, sizeof(si)); si.sin_family = AF_INET; si.sin_port = htons(PORT); si.sin_addr.s_addr = htonl(INADDR_ANY); //bind socket to port if (bind(sock, (struct sockaddr*)&si, sizeof(si)) == -1) { printf("Error binding to port\n"); return 0; } return 1; } int basiliskIfRecv(uint8_t *buf, int len) { fd_set fds; FD_ZERO(&fds); FD_SET(sock, &fds); struct timeval tout; memset(&tout, 0, sizeof(tout)); int r=select(sock+1, &fds, NULL, NULL, &tout); if (r>0) { int l=read(sock, buf, len); return l; } else { return 0; } } int basiliskIfSend(uint8_t *buf, int len) { struct sockaddr_in sin; memset(&sin, 0, sizeof(struct sockaddr_in)); sin.sin_family = AF_INET; sin.sin_port = (in_port_t)htons(PORT); sin.sin_addr.s_addr = htonl(INADDR_BROADCAST); int r=sendto(sock, buf, len, 0, (struct sockaddr *)&sin, sizeof(struct sockaddr_in)); if (r<0) { perror("sendto"); } }