diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index e60c1215032dfb410003c2be8fcdc559d6180933..9e1e23d322814ca5579ff573ccd085656c09a563 100644
--- a/src/sbbs3/js_socket.c
+++ b/src/sbbs3/js_socket.c
@@ -513,6 +513,30 @@ js_ioctlsocket(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 	return(JS_TRUE);
 }
 
+static JSBool
+js_poll(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+{
+	private_t*	p;
+	fd_set	socket_set;
+	struct	timeval tv = {0, 0};
+
+	if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL)
+		return(JS_FALSE);
+
+	if(argc>0)
+		tv.tv_sec = JSVAL_TO_INT(argv[0]);
+
+	FD_ZERO(&socket_set);
+	FD_SET(p->sock,&socket_set);
+
+	*rval = INT_TO_JSVAL(select(p->sock+1,&socket_set,NULL,NULL,&tv));
+
+	p->last_error=ERROR_VALUE;
+
+	return(JS_TRUE);
+}
+
+
 /* Socket Object Properites */
 enum {
 	 SOCK_PROP_LAST_ERROR
@@ -655,6 +679,7 @@ static JSFunctionSpec js_socket_functions[] = {
 	{"getoption",		js_getsockopt,		1},		/* getsockopt(opt)					*/
 	{"setoption",		js_setsockopt,		2},		/* setsockopt(opt,val)				*/
 	{"ioctl",			js_ioctlsocket,		1},		/* ioctl(cmd,arg)					*/
+	{"poll",			js_poll,			1},		/* poll(seconds)					*/
 	{0}
 };