if((iosock->socket_flags & IOSOCKETFLAG_IPV6SOCKET)) {
struct sockaddr_in6 *ip6bind = (void*) iosock->bind.addr.address;
ip6bind->sin6_family = AF_INET6;
- ip6bind->sin6_port = htons(0);
+ ip6bind->sin6_port = htons(iosock->port);
int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt));
} else {
struct sockaddr_in *ip4bind = (void*) iosock->bind.addr.address;
ip4bind->sin_family = AF_INET;
- ip4bind->sin_port = htons(0);
+ ip4bind->sin_port = htons(iosock->port);
int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt));
}
new_iosocket->iosocket = new_iosock;
new_iosocket->status = IOSOCKET_CONNECTED;
+ new_iosocket->data = iosock;
new_iosock->parent = new_iosocket;
new_iosock->socket_flags |= IOSOCKETFLAG_PARENT_PUBLIC | IOSOCKETFLAG_INCOMING | (iosock->socket_flags & IOSOCKETFLAG_IPV6SOCKET);
struct IOSocket *iosocket_listen_ssl_flags(const char *hostname, unsigned int port, const char *certfile, const char *keyfile, iosocket_callback *callback, int flags) {
struct IOSocket *iosocket = iosocket_listen_flags(hostname, port, callback, flags);\r
struct _IOSocket *iosock = iosocket->iosocket;\r
- iosock->socket_flags |= IOSOCKETFLAG_SSLSOCKET | IOSOCKETFLAG_SSL_HANDSHAKE;\r
+ iosock->socket_flags |= IOSOCKETFLAG_SSLSOCKET;\r
iossl_listen(iosock, certfile, keyfile);
return iosocket;
}
//incoming SSL connection accepted\r
iosock->socket_flags &= ~IOSOCKETFLAG_SSL_HANDSHAKE;\r
callback_event.type = IOSOCKETEVENT_ACCEPT;\r
- callback_event.data.accept_socket = iosock->parent;\r
+ callback_event.data.accept_socket = iosock->parent;
+ struct _IOSocket *parent_socket = iosocket->data;
+ callback_event.socket = parent_socket->parent;
+
+ //initialize readbuf
+ iosocket_increase_buffer(&iosock->readbuf, 1024);\r
} else {\r
//incoming SSL connection failed, simply drop\r
iosock->socket_flags |= IOSOCKETFLAG_DEAD;\r