static void writable (PseudoTcpSocket *sock, gpointer data) { g_debug ("Socket %p Writable", sock); if (in && sock == left) write_to_sock (sock); }
static void opened (PseudoTcpSocket *sock, gpointer data) { g_debug ("Socket %p Opened", sock); if (sock == left) { if (in) write_to_sock (sock); else { pseudo_tcp_socket_send (sock, "abcdefghijklmnopqrstuvwxyz", 26); reading_done = TRUE; pseudo_tcp_socket_close (sock, FALSE); } } }
int dev_read_completed(HANDLE devfd, SOCKET sockfd, OVERLAPPED *ov) { int ret; unsigned long len; ret = GetOverlappedResult(devfd, ov, &len, FALSE); if(!ret){ err("get overlapping failed: %ld", GetLastError()); return -1; } ret = write_to_sock(dev_read_buf, len, sockfd); if(ret<0) return -1; return dev_read_async(devfd, sockfd, ov); }
int dev_read_async(HANDLE devfd, SOCKET sockfd, OVERLAPPED *ov) { int ret, x; unsigned long len; do { len=0; ret = ReadFile(devfd, dev_read_buf, BIG_SIZE, &len, ov); if(!ret && (x=GetLastError())!=ERROR_IO_PENDING) { err("read:%d x:%d\n",ret, x); return -1; } if(!ret) return 0; ret = write_to_sock(dev_read_buf, len, sockfd); if(ret<0) return -1; } while(1); }