#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ulog(f, a...) fprintf(stderr, f, ##a) #define ulog_err(f, a...) ulog(f ": %s [%d].\n", ##a, strerror(errno), errno) int main(int argc, char *argv[]) { struct hostent *h; int s, err; char buf[128]; struct sockaddr_in sa; fd_set rfds; struct timeval tv; if (argc != 3) { ulog("Usage: %s \n", argv[0]); return -1; } h = gethostbyname(argv[1]); if (!h) { ulog_err("%s: Failed to get address of %s.\n", __func__, argv[1]); return -1; } s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == -1) { ulog_err("%s: Failed to create server socket", __func__); return -1; } memcpy(&(sa.sin_addr.s_addr), h->h_addr_list[0], 4); sa.sin_port = htons(atoi(argv[2])); sa.sin_family = AF_INET; if (connect(s, (struct sockaddr *)&sa, sizeof(sa))) { ulog_err("%s: Failed to connect to %s:%s", __func__, argv[1], argv[2]); return -1; } do { FD_ZERO(&rfds); FD_SET(s, &rfds); tv.tv_sec = 500; tv.tv_usec = 0; err = select(s+1, &rfds, NULL, NULL, &tv); ulog("select: err: %d, errno: %d.\n", err, errno); err = write(s, buf, sizeof(buf)); ulog("write: err: %d, errno: %d.\n", err, errno); } while (err > 0); FD_ZERO(&rfds); FD_SET(s, &rfds); tv.tv_sec = 500; tv.tv_usec = 0; err = select(s+1, &rfds, NULL, NULL, &tv); ulog("on exit: select: err: %d, errno: %d.\n", err, errno); }