static int64_t HHVM_METHOD(UVUdp, getSockport) { auto* data = Native::data<UVUdpData>(this_); struct sockaddr addr; int addrlen; if(data->udp_handle->sockPort == 0){ addrlen = sizeof addr; if(uv_udp_getsockname(data->udp_handle, &addr, &addrlen)){ return -1; } data->udp_handle->sockAddr = sock_addr(&addr); data->udp_handle->sockPort = sock_port(&addr); } return data->udp_handle->sockPort; }
/* * Main Program : */ int main(int argc,char **argv,char **envp) { int z; /* Status return code */ int sck_inet; /* Socket */ struct sockaddr_in adr_inet;/* AF_INET */ int len_inet; /* length */ char buf[64]; /* Work buffer */ /* * Create an IPv4 Internet Socket: */ sck_inet = socket(AF_INET,SOCK_STREAM,0); if ( sck_inet == -1 ) bail("socket()"); /* * Create an AF_INET address: */ memset(&adr_inet,0,sizeof adr_inet); adr_inet.sin_family = AF_INET; adr_inet.sin_port = htons(9000); inet_aton("127.0.0.24",&adr_inet.sin_addr); len_inet = sizeof adr_inet; /* * Now bind the address to the socket: */ z = bind(sck_inet, (struct sockaddr *)&adr_inet, len_inet); if ( z == -1 ) bail("bind()"); /* * Now test our sock_addr() function : */ if ( !sock_addr(sck_inet,buf,sizeof buf) ) bail("sock_addr()"); printf("Address is '%s'\n",buf); close(sck_inet); return 0; }
static void send_cb(uv_udp_send_t* sr, int status) { send_req_t *req = (send_req_t *) sr; uv_udp_ext_t *udp_handle = (uv_udp_ext_t *) req->handle; auto* data = Native::data<UVUdpData>(udp_handle->udp_object_data); auto callback = data->sendCallback; if(!callback.isNull()){ vm_call_user_func(callback, make_packed_array( udp_handle->udp_object_data, sock_addr((struct sockaddr *) &req->addr), sock_port((struct sockaddr *) &req->addr), status ) ); } delete req->buf.base; delete req; }
static void create_socket(void) { struct sock_descr descr; if (sock_addr(sock_path, &descr) < 0) fatal("can't open socket path: %s\n", sock_path); sock_fd = socket(descr.domain, SOCK_STREAM, descr.proto); if (sock_fd < 0) fatal("socket (%s)", strerror(errno)); if (setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &const_int_1, sizeof(const_int_1))) fatal("setsockopt (%s)", strerror(errno)); if (bind(sock_fd, (struct sockaddr *)&descr.addr, descr.addrlen) < 0) fatal("bind (%s)", strerror(errno)); if (listen(sock_fd, 1) < 0) fatal("listen (%s)", strerror(errno)); }
static void recv_cb(uv_udp_ext_t* udp_handle, ssize_t nread, const uv_buf_t* buf, const struct sockaddr* addr, unsigned int flags) { auto* data = Native::data<UVUdpData>(udp_handle->udp_object_data); auto recvCallback = data->recvCallback; auto errorCallback = data->errorCallback; if(nread > 0){ if(!recvCallback.isNull()){ vm_call_user_func(recvCallback, make_packed_array( udp_handle->udp_object_data, sock_addr((struct sockaddr *) addr), sock_port((struct sockaddr *) addr), String(buf->base, nread, CopyString), (int64_t) flags ) ); } } else{ if(!errorCallback.isNull()){ vm_call_user_func(errorCallback, make_packed_array(udp_handle->udp_object_data, nread, (int64_t) flags)); } } delete buf->base; }
void CServerApp::SetRPCAddrPort(_U32 ip, _U16 port) { sock_addr(&m_saRPC, ip, port); }
CServerApp::CServerApp(_U32 nIOThreadCount) { m_hIOWorkers = CreateWorkers(nIOThreadCount); sock_addr(&m_saRPC, 0, 0); sock_addr(&m_saListen, 0, 0); }