int main(int argc, char *argv[]) { int sfd, j; size_t len; ssize_t numRead; char buf[BUF_SIZE]; if (argc < 2 || strcmp(argv[1], "--help") == 0) usageErr("%s host msg...\n", argv[0]); /* Construct server address from first command-line argument */ sfd = inetConnect(argv[1], SERVICE, SOCK_DGRAM); if (sfd == -1) fatal("Could not connect to server socket"); /* Send remaining command-line arguments to server as separate datagrams */ for (j = 2; j < argc; j++) { len = strlen(argv[j]); if (write(sfd, argv[j], len) != len) fatal("partial/failed write"); numRead = read(sfd, buf, BUF_SIZE); if (numRead == -1) errExit("read"); printf("[%ld bytes] %.*s\n", (long) numRead, (int) numRead, buf); } exit(EXIT_SUCCESS); }
int main(int argc, char *argv[]) { char *reqLenStr; /* Requested length of sequence */ char seqNumStr[INT_LEN]; /* Start of granted sequence */ int cfd; ssize_t numRead; if (argc < 2 || strcmp(argv[1], "--help") == 0) usageErr("%s server-host [sequence-len]\n", argv[0]); cfd = inetConnect(argv[1], PORT_NUM_STR, SOCK_STREAM); if (cfd == -1) fatal("inetConnect() failed"); reqLenStr = (argc > 2) ? argv[2] : "1"; if (write(cfd, reqLenStr, strlen(reqLenStr)) != strlen(reqLenStr)) fatal("Partial/failed write (reqLenStr)"); if (write(cfd, "\n", 1) != 1) fatal("Partial/failed write (newline)"); numRead = readLine(cfd, seqNumStr, INT_LEN); if (numRead == -1) errExit("readLine"); if (numRead == 0) fatal("Unexpected EOF from server"); printf("Sequence number: %s", seqNumStr); /* Includes '\n' */ exit(EXIT_SUCCESS); /* Closes 'cfd' */ }
/* * Returns a file descriptor for a socket connected to the monitor * server. * Return -1 on error. */ int bfdmonClient_init(const char *monitor_server) { bfdmonClientDebug("bfdmon: Initializing\n"); if (!subscriptionTree) { subscriptionTree = avl_create(bfdmonClient_SubscriptionCompare, NULL); } return inetConnect(monitor_server, DEFAULT_MONITOR_PORT); }
int main(int argc, char *argv[]) { int listenFd, acceptFd, connFd; socklen_t len; /* Size of socket address buffer */ void *addr; /* Buffer for socket address */ char addrStr[IS_ADDR_STR_LEN]; if (argc != 2 || strcmp(argv[1], "--help") == 0) usageErr("%s service\n", argv[0]); /* Create listening socket, obtain size of address structure */ listenFd = inetListen(argv[1], 5, &len); if (listenFd == -1) errExit("inetListen"); connFd = inetConnect(NULL, argv[1], SOCK_STREAM); if (connFd == -1) errExit("inetConnect"); acceptFd = accept(listenFd, NULL, NULL); if (acceptFd == -1) errExit("accept"); addr = malloc(len); if (addr == NULL) errExit("malloc"); if (getsockname(connFd, addr, &len) == -1) errExit("getsockname"); printf("getsockname(connFd): %s\n", inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN)); if (getsockname(acceptFd, addr, &len) == -1) errExit("getsockname"); printf("getsockname(acceptFd): %s\n", inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN)); if (getpeername(connFd, addr, &len) == -1) errExit("getpeername"); printf("getpeername(connFd): %s\n", inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN)); if (getpeername(acceptFd, addr, &len) == -1) errExit("getpeername"); printf("getpeername(acceptFd): %s\n", inetAddressStr(addr, len, addrStr, IS_ADDR_STR_LEN)); sleep(30); /* Give us time to run netstat(8) */ exit(EXIT_SUCCESS); }
int main(int argc, char *argv[]) { int sfd; ssize_t numRead; char buf[BUF_SIZE]; if (argc != 2 || strcmp(argv[1], "--help") == 0) usageErr("%s host\n", argv[0]); sfd = inetConnect(argv[1], "echo", SOCK_STREAM); if (sfd == -1) errExit("inetConnect"); switch (fork()) { case -1: errExit("fork"); case 0: /* Child: read server's response, echo on stdout */ for (;;) { numRead = read(sfd, buf, BUF_SIZE); if (numRead <= 0) /* Exit on EOF or error */ break; printf("%.*s", (int) numRead, buf); } exit(EXIT_SUCCESS); default: /* Parent: write contents of stdin to socket */ for (;;) { numRead = read(STDIN_FILENO, buf, BUF_SIZE); if (numRead <= 0) /* Exit loop on EOF or error */ break; if (write(sfd, buf, numRead) != numRead) fatal("write() failed"); } /* Close writing channel, so server sees EOF */ if (shutdown(sfd, SHUT_WR) == -1) errExit("shutdown"); exit(EXIT_SUCCESS); } }
int transfer(char *host, char *port) { int sfd; // server socket fileop_t *f; // contains all operations for a file sfd = inetConnect(host, port, SOCK_STREAM); if (sfd == -1) { errnoMsg(LOG_ERR, "Unable to connect to the server."); return -1; } // initiate sync (sync-id, resource, number of files) errMsg(LOG_INFO, "Number of files: %d", HASH_COUNT(files)); switch (initiateSync(sfd, HASH_COUNT(files))) { case -1: // error return -1; case -2: // there's nothing to synchronize return 0; default: break; } // iterate over files in correct order HASH_SORT(files, sortByOrder); for (f = files; f != NULL; f = (fileop_t*) (f->hh.next)) { if (transferFile(sfd, f) == -1) { errMsg(LOG_ERR, "Transfer of file %s has failed.", f->relpath); return -1; } } // wait for ACK SyncFinish *conf; conf = (SyncFinish *) recvMessage(sfd, SyncFinishType, NULL); if (conf == NULL) { errMsg(LOG_ERR, "Could not get transfer confirmation."); return -1; } return 0; }
int main (int argc, char **argv) { if (argc < 2 || strcmp(argv[1], "--help") == 0) usageErr("%s server-host [sequence-len]\n",argv[0]); int cfd = inetConnect(argv[1], PORT_NUM, SOCK_STREAM); if (cfd == -1) errExit("can't connect"); /* send/recv msg */ char recvbuf[INT_LEN]; if (write(cfd, "123\n", 4) != 4) errExit("write fail"); ssize_t numRead = read(cfd, recvbuf, INT_LEN-1); if (numRead == -1) errExit("readLine"); if (numRead == 0) errExit("get eof from server"); recvbuf[numRead]='\0'; printf("get from serv:%s\n", recvbuf); return 0; }
int main(int argc, char **argv) { if(argc != 2) { fprintf(stderr, "usage: %s [url]\n", argv[0]); return 0; } typedef struct http_parser_url HP_URL; HP_URL *u = (HP_URL*)malloc(sizeof(HP_URL)); char *url = argv[1], *host, *path, *query = NULL, *get_request; int sockfd; int result = http_parser_parse_url(url, strlen(url), 0, u); if (result != 0) { fprintf(stderr, "url parse error : %d\n", result); free(u); return result; } if((u->field_set & (1 << UF_HOST)) != 0) host = strndup(url+u->field_data[UF_HOST].off,u->field_data[UF_HOST].len); if((u->field_set & (1 << UF_PATH)) != 0) path = strndup(url+u->field_data[UF_PATH].off,u->field_data[UF_PATH].len); else path = strdup("/"); if((u->field_set & (1 << UF_QUERY)) != 0) { query = strndup(url+u->field_data[UF_QUERY].off,u->field_data[UF_QUERY].len); printf("query = %s\n", query); } printf("host = %s\n", host); printf("path = %s\n", path); if((sockfd = inetConnect(host, "80")) < 0) { fprintf(stderr, "error: connect()\n"); free(query); free(host); free(path); return -1; } if(query) { get_request = calloc(1,snprintf(NULL, 0, "GET %s?%s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, query, host)+1); sprintf(get_request, "GET %s?%s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, query, host); } else { get_request = calloc(1,snprintf(NULL, 0, "GET %s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, host)+1); sprintf(get_request, "GET %s HTTP/1.1\r\nUser-Agent: Chrome\r\nHost: %s\r\nAccept: */*\r\n\r\n", path, host); } printf("get_request:\n---------------\n%s---------------\n",get_request); send(sockfd, get_request, strlen(get_request), 0); // receive response //char *pageContentBuffer = (char*)malloc(4096); //recv(sockfd, pageContentBuffer, 4096, 0); /* this: do { i = recv(sock->sockfd, data, sz, 0); if (i <= 0 && (errno == EAGAIN)) continue; n = i; } while (n == 0); */ struct timeval tv; fd_set readfds; //tv.tv_sec = 2; tv.tv_sec = 10; tv.tv_usec = 0; FD_ZERO(&readfds); FD_SET(sockfd, &readfds); int i = 0, n=0; int amntRecvd = 0; int currentSize = 4096; int oldSize = currentSize; char *pageContentBuffer = (char*) malloc(currentSize); char *newBuffer; do { select(sockfd+1, &readfds, NULL, NULL, &tv); // if we don't have data to read, exit loop if(!FD_ISSET(sockfd, &readfds)) break; amntRecvd = recv(sockfd, pageContentBuffer + i, 4096, 0); printf("recv() returned = %d\n",amntRecvd); //printf("got: %d bytes\n", amntRecvd); i += amntRecvd; //printf("pageContentBuffer[i-1] = 0x%02x\n",pageContentBuffer[i-1]); //if(pageContentBuffer[i-1] == '\n' && pageContentBuffer[i-2] == '\r') // break; oldSize = currentSize; currentSize += 4096; newBuffer = malloc(currentSize); memcpy(newBuffer,pageContentBuffer,oldSize); free(pageContentBuffer); pageContentBuffer = newBuffer; n = amntRecvd; tv.tv_sec = 1; tv.tv_usec = 100000; } while (n > 0); printf("response:\n---------------\n%s\n---------------\n",pageContentBuffer); close(sockfd); free(pageContentBuffer); free(get_request); free(host); free(path); free(query); free(u); return 0; }
/* Functions. */ int main() { inetConnect(); return 0; }