SOCKET accept_inet_connection(int port) { int flags; SOCKET client = INVALID_SOCKET; dbgprint("serverSocket=%d\n", wifiServerSocket); if (wifiServerSocket == INVALID_SOCKET && !StartInetServer(port)) goto _error_out; dbgprint("waiting on port %d..", port); while(v_running && (client = accept(wifiServerSocket, NULL, NULL)) == INVALID_SOCKET) { if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR){ usleep(50000); continue; } MSG_LASTERROR("Accept Failed"); break; } if (client != INVALID_SOCKET) {// Blocking.. flags = fcntl(wifiServerSocket, F_GETFL, NULL); flags |= O_NONBLOCK; fcntl(wifiServerSocket, F_SETFL, flags); } _error_out: return client; }
SOCKET connectDroidCam(char * ip, int port) { struct sockaddr_in sin; SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if(sock == INVALID_SOCKET) { MSG_LASTERROR("Error"); } else { sin.sin_family = AF_INET; sin.sin_addr.s_addr = inet_addr(ip); sin.sin_port = htons(port); printf("connect IP='%x' (%s); p:%d\n", sin.sin_addr.s_addr, ip, port); if (connect(sock, (struct sockaddr*)&sin, sizeof(sin)) < 0) { printf("connect failed %d '%s'\n", errno, strerror(errno)); MSG_ERROR("Connect failed, please try again.\nCheck IP and Port.\nCheck network connection."); close(sock); sock = INVALID_SOCKET; } } return sock; }
static int StartInetServer(int port) { int flags = 0; int ret = 0; struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(port); wifiServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(wifiServerSocket == INVALID_SOCKET) { MSG_LASTERROR("Could not create socket"); goto _error_out; } if(bind(wifiServerSocket, (struct sockaddr*)&sin, sizeof(sin)) < 0) { printf("bind( .. ) Failed (Error %d: %s) \n", errno, strerror(errno)); goto _error_out; } if(listen(wifiServerSocket, 1) < 0) { printf("listen( .. ) Failed (Error %d: %s) \n", errno, strerror(errno)); goto _error_out; } flags = fcntl(wifiServerSocket, F_GETFL, NULL); if(flags < 0) { printf("fcntl( .. ) Failed (Error %d: %s) \n", errno, strerror(errno)); goto _error_out; } flags |= O_NONBLOCK; fcntl(wifiServerSocket, F_SETFL, flags); ret = 1; goto _exitOk; _error_out: if (wifiServerSocket != INVALID_SOCKET){ close(wifiServerSocket); wifiServerSocket = INVALID_SOCKET; } _exitOk: return ret; }
static void load_settings(void) { char buf[PATH_MAX]; FILE * fp; snprintf(buf, sizeof(buf), "%s/.droidcam/settings", getenv("HOME")); fp = fopen(buf, "r"); if (!fp){ MSG_LASTERROR("settings error"); return; } if(fgets(buf, sizeof(buf), fp)){ sscanf(buf, "%d-%d", &g_webcam_w, &g_webcam_h); dbgprint("got webcam_w=%d, webcam_h=%d\n", g_webcam_w, g_webcam_h); } fclose(fp); }
static int StartBthServer() { int ret = 0; int flags = 0; uint8_t port = 0; struct sockaddr_rc localAddr = { 0 }; if((btServerSocket = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)) == INVALID_SOCKET){ MSG_LASTERROR("Could not create bluetooth socket"); goto _error_out; } // bind socket to 1st available port of the first available local bluetooth adapter localAddr.rc_family = AF_BLUETOOTH; localAddr.rc_bdaddr = *BDADDR_ANY; for (port = 1; port < 30; port++) { dbgprint("Trying port %d\n", port); localAddr.rc_channel = htons(port); if(bind(btServerSocket, (struct sockaddr*) &localAddr, sizeof(localAddr)) == 0) { printf("bind bth on port %d\n", port); break; } } if (port == 30){ MSG_ERROR("Could not bind bluetooth socket"); goto _error_out; } if ( !RegisterSdp(port) ) goto _error_out; if(listen(btServerSocket, 1) < 0) { MSG_LASTERROR("Could not listen on bt socket"); goto _error_out; } if((flags = fcntl(btServerSocket, F_GETFL, NULL)) < 0) { MSG_LASTERROR("Could not get bt socket flags"); goto _error_out; } flags |= O_NONBLOCK; fcntl(btServerSocket, F_SETFL, flags); ret = 1; goto _exitOk; _error_out: if (btServerSocket != INVALID_SOCKET){ close(btServerSocket); btServerSocket = INVALID_SOCKET; } _exitOk: return ret; }