int main(int argc, char* argv[]) { int listenfd, connfd; struct sockaddr_in addr; char buf[256]; time_t tick; network_init(); listenfd = common_socket(AF_INET, SOCK_STREAM, 0); addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; addr.sin_port = htons(5555); common_bind(listenfd, (struct sockaddr*)&addr, sizeof(addr)); common_listen(listenfd, 5); for (;;) { connfd = common_accept(listenfd, NULL, NULL); tick = time(NULL); snprintf(buf, sizeof(buf), "%.24s\r\n", ctime(&tick)); common_write(connfd, buf, strlen(buf)); common_close(connfd); } common_close(listenfd); network_destroy(); return 0; }
int _user_accept(int socket, struct sockaddr *userAddress, socklen_t *_addressLength) { // check parameters socklen_t addressLength = 0; status_t error = prepare_userland_address_result(userAddress, _addressLength, addressLength, false); if (error != B_OK) return error; // accept() SyscallRestartWrapper<int> result; char address[MAX_SOCKET_ADDRESS_LENGTH]; socklen_t userAddressBufferSize = addressLength; result = common_accept(socket, userAddress != NULL ? (sockaddr*)address : NULL, &addressLength, false); // copy address size and address back to userland if (copy_address_to_userland(address, addressLength, userAddress, userAddressBufferSize, _addressLength) != B_OK) { _user_close(result); return B_BAD_ADDRESS; } return result; }
int main(int argc, char* argv[]) { int listenfd; int clientfd; struct sockaddr_in addr; socklen_t addrlen; network_init(); listenfd = common_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; addr.sin_port = htons(5555); common_bind(listenfd, (struct sockaddr*)&addr, sizeof(addr)); common_listen(listenfd, SOMAXCONN); printf("echo server start sucess !!!\n"); for (;;) { addrlen = sizeof(addr); clientfd = common_accept(listenfd, (struct sockaddr*)&addr, &addrlen); CreateThread(NULL, 0, echo_process, &clientfd, 0, NULL); } common_close(listenfd); network_destroy(); return 0; }
int accept(int socket, struct sockaddr *address, socklen_t *_addressLength) { SyscallFlagUnsetter _; RETURN_AND_SET_ERRNO(common_accept(socket, address, _addressLength, true)); }