diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index b920543..f8f522b 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -925,7 +925,7 @@
 /* s.accept() method */
 
 static PyObject *
-PySocketSock_accept(PySocketSockObject *s, PyObject *args)
+PySocketSock_accept(PySocketSockObject *s)
 {
 	char addrbuf[256];
 	SOCKET_T newfd;
@@ -934,8 +934,6 @@
 	PyObject *addr = NULL;
 	PyObject *res = NULL;
 
-	if (!PyArg_ParseTuple(args, ":accept"))
-		return NULL;
 	if (!getsockaddrlen(s, &addrlen))
 		return NULL;
 	memset(addrbuf, 0, addrlen);
@@ -983,7 +981,7 @@
 /* s.setblocking(1 | 0) method */
 
 static PyObject *
-PySocketSock_setblocking(PySocketSockObject *s, PyObject *args)
+PySocketSock_setblocking(PySocketSockObject *s, PyObject *arg)
 {
 	int block;
 #ifndef RISCOS
@@ -991,7 +989,8 @@
 	int delay_flag;
 #endif
 #endif
-	if (!PyArg_ParseTuple(args, "i:setblocking", &block))
+	block = PyInt_AsLong(arg);
+	if (block == -1 && PyErr_Occurred())
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
 #ifdef __BEOS__
@@ -1158,14 +1157,12 @@
 /* s.bind(sockaddr) method */
 
 static PyObject *
-PySocketSock_bind(PySocketSockObject *s, PyObject *args)
+PySocketSock_bind(PySocketSockObject *s, PyObject *addro)
 {
 	struct sockaddr *addr;
 	int addrlen;
 	int res;
-	PyObject *addro;
-	if (!PyArg_ParseTuple(args, "O:bind", &addro))
-		return NULL;
+
 	if (!getsockaddrarg(s, addro, &addr, &addrlen))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
@@ -1190,11 +1187,10 @@
    will surely fail. */
 
 static PyObject *
-PySocketSock_close(PySocketSockObject *s, PyObject *args)
+PySocketSock_close(PySocketSockObject *s)
 {
 	SOCKET_T fd;
-	if (!PyArg_ParseTuple(args, ":close"))
-		return NULL;
+
 	if ((fd = s->sock_fd) != -1) {
 		s->sock_fd = -1;
 		Py_BEGIN_ALLOW_THREADS
@@ -1214,14 +1210,12 @@
 /* s.connect(sockaddr) method */
 
 static PyObject *
-PySocketSock_connect(PySocketSockObject *s, PyObject *args)
+PySocketSock_connect(PySocketSockObject *s, PyObject *addro)
 {
 	struct sockaddr *addr;
 	int addrlen;
 	int res;
-	PyObject *addro;
-	if (!PyArg_ParseTuple(args, "O:connect", &addro))
-		return NULL;
+
 	if (!getsockaddrarg(s, addro, &addr, &addrlen))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
@@ -1243,14 +1237,12 @@
 /* s.connect_ex(sockaddr) method */
 
 static PyObject *
-PySocketSock_connect_ex(PySocketSockObject *s, PyObject *args)
+PySocketSock_connect_ex(PySocketSockObject *s, PyObject *addro)
 {
 	struct sockaddr *addr;
 	int addrlen;
 	int res;
-	PyObject *addro;
-	if (!PyArg_ParseTuple(args, "O:connect_ex", &addro))
-		return NULL;
+
 	if (!getsockaddrarg(s, addro, &addr, &addrlen))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
@@ -1271,10 +1263,8 @@
 /* s.fileno() method */
 
 static PyObject *
-PySocketSock_fileno(PySocketSockObject *s, PyObject *args)
+PySocketSock_fileno(PySocketSockObject *s)
 {
-	if (!PyArg_ParseTuple(args, ":fileno"))
-		return NULL;
 #if SIZEOF_SOCKET_T <= SIZEOF_LONG
 	return PyInt_FromLong((long) s->sock_fd);
 #else
@@ -1292,12 +1282,11 @@
 /* s.dup() method */
 
 static PyObject *
-PySocketSock_dup(PySocketSockObject *s, PyObject *args)
+PySocketSock_dup(PySocketSockObject *s)
 {
 	SOCKET_T newfd;
 	PyObject *sock;
-	if (!PyArg_ParseTuple(args, ":dup"))
-		return NULL;
+
 	newfd = dup(s->sock_fd);
 	if (newfd < 0)
 		return PySocket_Err();
@@ -1321,14 +1310,12 @@
 /* s.getsockname() method */
 
 static PyObject *
-PySocketSock_getsockname(PySocketSockObject *s, PyObject *args)
+PySocketSock_getsockname(PySocketSockObject *s)
 {
 	char addrbuf[256];
 	int res;
 	socklen_t addrlen;
 
-	if (!PyArg_ParseTuple(args, ":getsockname"))
-		return NULL;
 	if (!getsockaddrlen(s, &addrlen))
 		return NULL;
 	memset(addrbuf, 0, addrlen);
@@ -1351,14 +1338,12 @@
 /* s.getpeername() method */
 
 static PyObject *
-PySocketSock_getpeername(PySocketSockObject *s, PyObject *args)
+PySocketSock_getpeername(PySocketSockObject *s)
 {
 	char addrbuf[256];
 	int res;
 	socklen_t addrlen;
 
-	if (!PyArg_ParseTuple(args, ":getpeername"))
-		return NULL;
 	if (!getsockaddrlen(s, &addrlen))
 		return NULL;
 	memset(addrbuf, 0, addrlen);
@@ -1382,11 +1367,13 @@
 /* s.listen(n) method */
 
 static PyObject *
-PySocketSock_listen(PySocketSockObject *s, PyObject *args)
+PySocketSock_listen(PySocketSockObject *s, PyObject *arg)
 {
 	int backlog;
 	int res;
-	if (!PyArg_ParseTuple(args, "i:listen", &backlog))
+
+	backlog = PyInt_AsLong(arg);
+	if (backlog == -1 && PyErr_Occurred())
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
 	if (backlog < 1)
@@ -1606,11 +1593,13 @@
 /* s.shutdown(how) method */
 
 static PyObject *
-PySocketSock_shutdown(PySocketSockObject *s, PyObject *args)
+PySocketSock_shutdown(PySocketSockObject *s, PyObject *arg)
 {
 	int how;
 	int res;
-	if (!PyArg_ParseTuple(args, "i:shutdown", &how))
+
+	how = PyInt_AsLong(arg);
+	if (how == -1 && PyErr_Occurred())
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
 	res = shutdown(s->sock_fd, how);
@@ -1631,31 +1620,31 @@
 /* List of methods for socket objects */
 
 static PyMethodDef PySocketSock_methods[] = {
-	{"accept",	(PyCFunction)PySocketSock_accept, METH_VARARGS,
+	{"accept",	(PyNoArgsFunction)PySocketSock_accept, METH_NOARGS,
 			accept_doc},
-	{"bind",	(PyCFunction)PySocketSock_bind, METH_VARARGS,
+	{"bind",	(PyCFunction)PySocketSock_bind, METH_O,
 			bind_doc},
-	{"close",	(PyCFunction)PySocketSock_close, METH_VARARGS,
+	{"close",	(PyNoArgsFunction)PySocketSock_close, METH_NOARGS,
 			close_doc},
-	{"connect",	(PyCFunction)PySocketSock_connect, METH_VARARGS,
+	{"connect",	(PyCFunction)PySocketSock_connect, METH_O,
 			connect_doc},
-	{"connect_ex",	(PyCFunction)PySocketSock_connect_ex, METH_VARARGS,
+	{"connect_ex",	(PyCFunction)PySocketSock_connect_ex, METH_O,
 			connect_ex_doc},
 #ifndef NO_DUP
-	{"dup",		(PyCFunction)PySocketSock_dup, METH_VARARGS,
+	{"dup",		(PyNoArgsFunction)PySocketSock_dup, METH_NOARGS,
 			dup_doc},
 #endif
-	{"fileno",	(PyCFunction)PySocketSock_fileno, METH_VARARGS,
+	{"fileno",	(PyNoArgsFunction)PySocketSock_fileno, METH_NOARGS,
 			fileno_doc},
 #ifdef HAVE_GETPEERNAME
-	{"getpeername",	(PyCFunction)PySocketSock_getpeername, METH_VARARGS,
-			getpeername_doc},
+	{"getpeername",	(PyNoArgsFunction)PySocketSock_getpeername, 
+	                METH_NOARGS, getpeername_doc},
 #endif
-	{"getsockname",	(PyCFunction)PySocketSock_getsockname, METH_VARARGS,
-			getsockname_doc},
+	{"getsockname",	(PyNoArgsFunction)PySocketSock_getsockname,
+	                METH_NOARGS, getsockname_doc},
 	{"getsockopt",	(PyCFunction)PySocketSock_getsockopt, METH_VARARGS,
 			getsockopt_doc},
-	{"listen",	(PyCFunction)PySocketSock_listen, METH_VARARGS,
+	{"listen",	(PyCFunction)PySocketSock_listen, METH_O,
 			listen_doc},
 #ifndef NO_DUP
 	{"makefile",	(PyCFunction)PySocketSock_makefile, METH_VARARGS,
@@ -1669,11 +1658,11 @@
 			send_doc},
 	{"sendto",	(PyCFunction)PySocketSock_sendto, METH_VARARGS,
 			sendto_doc},
-	{"setblocking",	(PyCFunction)PySocketSock_setblocking, METH_VARARGS,
+	{"setblocking",	(PyCFunction)PySocketSock_setblocking, METH_O,
 			setblocking_doc},
 	{"setsockopt",	(PyCFunction)PySocketSock_setsockopt, METH_VARARGS,
 			setsockopt_doc},
-	{"shutdown",	(PyCFunction)PySocketSock_shutdown, METH_VARARGS,
+	{"shutdown",	(PyCFunction)PySocketSock_shutdown, METH_O,
 			shutdown_doc},
 #ifdef RISCOS
 	{"sleeptaskw",	(PyCFunction)PySocketSock_sleeptaskw, METH_VARARGS,
