#include <arpa/inet.h>
#include <netdb.h>
+// Fix missing definition on OS X.
+// Taken from https://github.com/unbit/uwsgi/commit/b608eb1772641d525bfde268fe9d6d8d0d5efde7
+#ifndef SOL_TCP
+#define SOL_TCP IPPROTO_TCP
+#endif
+
typedef struct termios term_info;
typedef struct {
int fd; // Serial port file descriptor
} serial_port_unix;
// Set time-out on 30 miliseconds
-const struct timeval timeout = {
+struct timeval timeout = {
.tv_sec = 0, // 0 second
- .tv_usec = 300000 // 300000 micro seconds
+ .tv_usec = 30000 // 30000 micro seconds
};
serial_port uart_open(const char* pcPortName)
if (sp == 0) return INVALID_SERIAL_PORT;
if (memcmp(pcPortName, "tcp:", 4) == 0) {
- struct addrinfo *addr, *rp;
+ struct addrinfo *addr = NULL, *rp;
char *addrstr = strdup(pcPortName + 4);
if (addrstr == NULL) {
printf("Error: strdup\n");
}
char *colon = strrchr(addrstr, ':');
char *portstr;
+
+ // Set time-out to 300 miliseconds only for TCP port
+ timeout.tv_usec = 300000;
+
if (colon) {
portstr = colon + 1;
*colon = '\0';
} else
portstr = "7901";
- int s = getaddrinfo(addrstr, portstr, NULL, &addr);
+ struct addrinfo info;
+
+ memset (&info, 0, sizeof(info));
+
+ info.ai_socktype = SOCK_STREAM;
+
+ int s = getaddrinfo(addrstr, portstr, &info, &addr);
if (s != 0) {
printf("Error: getaddrinfo: %s\n", gai_strerror(s));
return INVALID_SERIAL_PORT;