change extpoll in lib to new way
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index 03c37c2..5e3f50e 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -131,9 +131,10 @@
 	lwsl_info("insert_wsi_socket_into_fds: wsi=%p, sock=%d, fds pos=%d\n",
 					    wsi, wsi->sock, context->fds_count);
 
+	struct libwebsocket_pollargs pa = {wsi->sock, POLLIN, 0 };
 	context->protocols[0].callback(context, wsi,
 		LWS_CALLBACK_LOCK_POLL,
-		wsi->user_space, (void *)(long)wsi->sock, 0);
+		wsi->user_space, (void *) &pa, 0);
 
 	context->lws_lookup[wsi->sock] = wsi;
 	wsi->position_in_fds_table = context->fds_count;
@@ -144,11 +145,11 @@
 	/* external POLL support via protocol 0 */
 	context->protocols[0].callback(context, wsi,
 		LWS_CALLBACK_ADD_POLL_FD,
-		wsi->user_space, (void *)(long)wsi->sock, POLLIN);
+		wsi->user_space, (void *) &pa, 0);
 
 	context->protocols[0].callback(context, wsi,
 		LWS_CALLBACK_UNLOCK_POLL,
-		wsi->user_space, (void *)(long)wsi->sock, 0);
+		wsi->user_space, (void *)&pa, 0);
 
 	return 0;
 }
@@ -158,11 +159,12 @@
 						      struct libwebsocket *wsi)
 {
 	int m;
+	struct  libwebsocket_pollargs pa = { wsi->sock, 0, 0};
 
 	if (!--context->fds_count) {
 		context->protocols[0].callback(context, wsi,
 			LWS_CALLBACK_LOCK_POLL,
-			wsi->user_space, (void *)(long)wsi->sock, 0);
+			wsi->user_space, (void *) &pa, 0);
 		goto do_ext;
 	}
 
@@ -177,7 +179,7 @@
 
 	context->protocols[0].callback(context, wsi,
 		LWS_CALLBACK_LOCK_POLL,
-		wsi->user_space, (void *)(long)wsi->sock, 0);
+		wsi->user_space, (void *)&pa, 0);
 
 	m = wsi->position_in_fds_table; /* replace the contents for this */
 
@@ -197,15 +199,14 @@
 
 do_ext:
 	/* remove also from external POLL support via protocol 0 */
-	if (wsi->sock)
+	if (wsi->sock) {
 		context->protocols[0].callback(context, wsi,
 		    LWS_CALLBACK_DEL_POLL_FD, wsi->user_space,
-		    				    (void *)(long)wsi->sock, 0);
-
+		    (void *) &pa, 0);
+	}
 	context->protocols[0].callback(context, wsi,
-		LWS_CALLBACK_UNLOCK_POLL,
-		wsi->user_space, (void *)(long)wsi->sock, 0);
-
+				       LWS_CALLBACK_UNLOCK_POLL,
+				       wsi->user_space, (void *) &pa, 0);
 	return 0;
 }
 
@@ -1455,25 +1456,22 @@
 	int tid;
 	int sampled_ppoll_tid;
 #endif
+	struct libwebsocket_pollargs pa;
+
+	pa.fd = wsi->sock;
 
 	context->protocols[0].callback(context, wsi,
 		LWS_CALLBACK_LOCK_POLL,
-		wsi->user_space, (void *)(long)wsi->sock, 0);
+		wsi->user_space,  (void *) &pa, 0);
 
-	events = context->fds[wsi->position_in_fds_table].events;
+	pa.prev_events = events = context->fds[wsi->position_in_fds_table].events;
 
-	context->fds[wsi->position_in_fds_table].events = (events & ~_and) | _or;
+	pa.events = context->fds[wsi->position_in_fds_table].events = (events & ~_and) | _or;
 
-	/* external POLL support via protocol 0 */
-	if (_and)
-		context->protocols[0].callback(context, wsi,
-			LWS_CALLBACK_CLEAR_MODE_POLL_FD,
-			wsi->user_space, (void *)(long)wsi->sock, _and);
+	context->protocols[0].callback(context, wsi,
+			LWS_CALLBACK_CHANGE_MODE_POLL_FD,
+			wsi->user_space, (void *) &pa, 0);
 
-	if (_or)
-		context->protocols[0].callback(context, wsi,
-			LWS_CALLBACK_SET_MODE_POLL_FD,
-			wsi->user_space, (void *)(long)wsi->sock, _or);
 
 #ifdef LWS_HAS_PPOLL
 	/*
@@ -1497,7 +1495,7 @@
 
 	context->protocols[0].callback(context, wsi,
 		LWS_CALLBACK_UNLOCK_POLL,
-		wsi->user_space, (void *)(long)wsi->sock, 0);
+		wsi->user_space, (void *) &pa, 0);
 }