summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-09-23 16:58:09 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-09-23 16:58:09 +0000
commit1b15ed82bb5f48d8a03366af769331eac73c9993 (patch)
tree4a7606fb13420543bf3eff304e7f23c35bf1cebb
parent8cfdffb35c24737940e70af374300fe36f1fd465 (diff)
downloadnuttx-1b15ed82bb5f48d8a03366af769331eac73c9993.tar.gz
nuttx-1b15ed82bb5f48d8a03366af769331eac73c9993.tar.bz2
nuttx-1b15ed82bb5f48d8a03366af769331eac73c9993.zip
Add framework for listen() and connect() -- still missing logic
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@353 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/ChangeLog1
-rw-r--r--nuttx/Documentation/NuttX.html1
-rw-r--r--nuttx/Documentation/NuttxUserGuide.html147
-rw-r--r--nuttx/Makefile5
-rw-r--r--nuttx/arch/sim/src/Makefile19
-rw-r--r--nuttx/include/sys/socket.h3
-rw-r--r--nuttx/net/Makefile4
-rw-r--r--nuttx/net/accept.c129
-rw-r--r--nuttx/net/listen.c94
-rwxr-xr-xnuttx/netutils/uiplib/makestrings.c21
-rw-r--r--nuttx/netutils/webclient/Make.defs2
-rw-r--r--nuttx/netutils/webclient/webclient.h2
-rw-r--r--nuttx/netutils/webserver/Make.defs2
-rw-r--r--nuttx/netutils/webserver/httpd.c2
14 files changed, 391 insertions, 41 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 4038d05ba..7f5500337 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -212,4 +212,5 @@
* Implemented receive timeouts via setsockopt(SO_RCVTIMEO).
* Provide support for multiple network devices
* Implement socket ioctl() calls to set addresses
+ * Added listen() and accept()
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index 43b85d5e9..3369857b3 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -645,6 +645,7 @@ Other memory:
* Implemented receive timeouts via setsockopt(SO_RCVTIMEO).
* Provide support for multiple network devices
* Implement socket ioctl() calls to set addresses
+ * Added listen() and accept()
</pre></ul>
<table width ="100%">
diff --git a/nuttx/Documentation/NuttxUserGuide.html b/nuttx/Documentation/NuttxUserGuide.html
index 8ba152184..8485f287c 100644
--- a/nuttx/Documentation/NuttxUserGuide.html
+++ b/nuttx/Documentation/NuttxUserGuide.html
@@ -21,7 +21,7 @@ User's Manual
<p>
Gregory Nutt
<p>
-<small>Last Update: September 8, 2007</small>
+<small>Last Update: September 23, 2007</small>
</center>
<h1>1.0 <A NAME="Introduction">Introduction</a></h1>
@@ -5780,12 +5780,14 @@ Those socket APIs are discussed in the following paragraphs.</p>
<li><a href="#socket">2.12.1 socket</a></li>
<li><a href="#bind">2.12.2 bind</a></li>
<li><a href="#connect">2.12.3 connect</a></li>
-<li><a href="#send">2.12.4 send</a></li>
-<li><a href="#sendto">2.12.5 sendto</a></li>
-<li><a href="#recv">2.12.6 recv</a></li>
-<li><a href="#recvfrom">2.12.7 recvfrom</a></li>
-<li><a href="#setsockopt">2.12.8 setsockopt</a></li>
-<li><a href="#getsockopt">2.12.9 getsockopt</a></li>
+<li><a href="#listen">2.12.4 listen</a></li>
+<li><a href="#accept">2.12.5 accept</a></li>
+<li><a href="#send">2.12.6 send</a></li>
+<li><a href="#sendto">2.12.7 sendto</a></li>
+<li><a href="#recv">2.12.8 recv</a></li>
+<li><a href="#recvfrom">2.12.9 recvfrom</a></li>
+<li><a href="#setsockopt">2.12.10 setsockopt</a></li>
+<li><a href="#getsockopt">2.12.11 getsockopt</a></li>
</ul>
<h3><a name="socket">2.12.1 <code>socket</code></a></h3>
@@ -5951,7 +5953,122 @@ Those socket APIs are discussed in the following paragraphs.</p>
to accept new connections.</li>
</ul>
-<h3><a name="send">2.12.4 <code>send</code></a></h3>
+<h3><a name="listen">2.12.4 listen</a></h3>
+<p>
+ <b>Function Prototype:</b>
+</p>
+<pre>
+ #include <sys/socket.h>
+ int listen(int sockfd, int backlog);
+</pre>
+<p>
+ <b>Description:</b>
+ To accept connections, a socket is first created with <code>socket()</code>, a
+ willingness to accept incoming connections and a queue limit for incoming
+ connections are specified with <code>listen()</code>, and then the connections are
+ accepted with <code>accept()</code>. The <code>listen()</coe> call applies only to sockets of
+ type <code>SOCK_STREAM</code> or <code>SOCK_SEQPACKET</code>.
+</p>
+<p>
+ <b>Input Parameters:</b>
+</p>
+<ul>
+ <li><code>sockfd</code>: Socket descriptor of the bound socket.</li>
+ <li><code>backlog</code>: The maximum length the queue of pending connections may grow.
+ If a connection request arrives with the queue full, the client may receive an error
+ with an indication of ECONNREFUSED or, if the underlying protocol supports retransmission,
+ the request may be ignored so that retries succeed.</li>
+</ul>
+<p>
+ <b>Returned Values:</b>
+ On success, zero is returned. On error, -1 is returned, and errno is set appropriately.
+</p>
+<ul>
+ <li><code>EADDRINUSE</code>: Another socket is already listening on the same port.</li>
+ <li><code>EBADF</code>: The argument <code>sockfd</code> is not a valid descriptor.</li>
+ <li><code>ENOTSOCK</code>: The argument <code>sockfd</code> is not a socket.</li>
+ <li><code>EOPNOTSUPP</code>: The socket is not of a type that supports the listen operation.</li>
+ </ul>
+
+<h3><a name="accept">2.12.5 accept</a></h3>
+<p>
+ <b>Function Prototype:</b>
+</p>
+<pre>
+ #include <sys/socket.h>
+ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+</pre>
+<p>
+ <b>Description:</b>
+ The <code>accept()</code> function is used with connection-based socket types
+ (<code>SOCK_STREAM</code>, <code>SOCK_SEQPACKET</code> and <code>SOCK_RDM</code>).
+ It extracts the first connection request on the queue of pending connections,
+ creates a new connected socket with most of the same properties as <code>sockfd</code>,
+ and allocates a new socket descriptor for the socket, which is returned. The
+ newly created socket is no longer in the listening state. The original
+ socket <code>sockfd</code> is unaffected by this call. Per file descriptor flags
+ are not inherited across an accept.
+</p>
+<p>
+ The <code>sockfd</code> argument is a socket descriptor that has been created with
+ <code>socket()</code>, bound to a local address with <code>bind()</code>, and is listening for
+ connections after a call to <code>listen()</code>.
+</p>
+<p>
+ On return, the <code>addr</code> structure is filled in with the address of the
+ connecting entity. The <code>addrlen</code> argument initially contains the size
+ of the structure pointed to by <code>addr</code>; on return it will contain the
+ actual length of the address returned.
+</p>
+<p>
+ If no pending connections are present on the queue, and the socket is
+ not marked as non-blocking, accept blocks the caller until a connection
+ is present. If the socket is marked non-blocking and no pending
+ connections are present on the queue, accept returns <code>EAGAIN</code>.
+</p>
+<p>
+ <b>Input Parameters:</b>
+</p>
+<ul>
+ <li><code>sockfd</code>: Socket descriptor of the listening socket.</li>
+ <li><code>addr</code>: Receives the address of the connecting client.</li>
+ <li><code>addrlen</code>: Input: allocated size of <code>addr</code>, Return: returned size of <code>addr</code>.</li>
+</ul>
+<p>
+ <b>Returned Values:</b>
+ Returns -1 on error. If it succeeds, it returns a non-negative integer
+ that is a descriptor for the accepted socket.
+</p>
+<ul>
+ <li><code>EAGAIN</code> or <code>EWOULDBLOCK</code>:
+ The socket is marked non-blocking and no connections are present to be accepted.</li>
+ <li><code>EBADF</code>:
+ The descriptor is invalid.</li>
+ <li><code>ENOTSOCK</code>:
+ The descriptor references a file, not a socket.</li>
+ <li><code>EOPNOTSUPP</code>:
+ The referenced socket is not of type <code>SOCK_STREAM</code>.</li>
+ <li><code>EINTR</code>:
+ The system call was interrupted by a signal that was caught before a valid connection arrived.</li>
+ <li><code>ECONNABORTED</code>:
+ A connection has been aborted.</li>
+ <li><code>EINVAL</code>:
+ Socket is not listening for connections.</li>
+ <li><code>EMFILE</code>:
+ The per-process limit of open file descriptors has been reached.</li>
+ <li><code>ENFILE</code>:
+ The system maximum for file descriptors has been reached.</li>
+ <li><code>EFAULT</code>:
+ The addr parameter is not in a writable part of the user address space.</li>
+ <li><code>ENOBUFS</code> or <code>ENOMEM</code>:
+ Not enough free memory.</li>
+ <li><code>EPROTO</code>:
+ Protocol error.</li>
+ <li><code>EPERM</code>:
+ Firewall rules forbid connection.</li>
+</ul>
+
+<h3><a name="send">2.12.6 <code>send</code></a></h3>
<p>
<b>Function Prototype:</b>
</p>
@@ -5983,7 +6100,7 @@ Those socket APIs are discussed in the following paragraphs.</p>
See <a href="#sendto"><code>sendto()</code></a>.
</p>
-<h3><a name="sendto">2.12.5 <code>sendto</code></a></h3>
+<h3><a name="sendto">2.12.7 <code>sendto</code></a></h3>
<p>
<b>Function Prototype:</b>
</p>
@@ -6055,7 +6172,7 @@ Those socket APIs are discussed in the following paragraphs.</p>
MSG_NOSIGNAL is set.
</ul>
-<h3><a name="recv">2.12.6 <code>recv</code></a></h3>
+<h3><a name="recv">2.12.8 <code>recv</code></a></h3>
<p>
<b>Function Prototype:</b>
</p>
@@ -6086,7 +6203,7 @@ Those socket APIs are discussed in the following paragraphs.</p>
Zero on success.
</p>
-<h3><a name="recvfrom">2.12.7 <code>recvfrom</code></a></h3>
+<h3><a name="recvfrom">2.12.9 <code>recvfrom</code></a></h3>
<p>
<b>Function Prototype:</b>
</p>
@@ -6148,7 +6265,7 @@ Those socket APIs are discussed in the following paragraphs.</p>
The argument <code>sockfd</code> does not refer to a socket.
</ul>
-<h3><a name="setsockopt">2.12.8 <code>setsockopt</code></a></h3>
+<h3><a name="setsockopt">2.12.10 <code>setsockopt</code></a></h3>
<p>
<b>Function Prototype:</b>
</p>
@@ -6208,7 +6325,7 @@ Those socket APIs are discussed in the following paragraphs.</p>
Insufficient resources are available in the system to complete the call.
</ul>
-<h3><a name="getsockopt">2.12.9 <code>getsockopt</code></a></h3>
+<h3><a name="getsockopt">2.12.11 <code>getsockopt</code></a></h3>
<p>
<b>Function Prototype:</b>
</p>
@@ -6469,6 +6586,7 @@ notify a task when a message is available on a queue.
<table width="100%">
<tr>
<td>
+ <li><a href="#accept">accept</a></li>
<li><a href="#bind">bind</a></li>
<li><a href="#clockgetres">clock_getres</a></li>
<li><a href="#clockgettime">clock_gettime</a></li>
@@ -6485,6 +6603,7 @@ notify a task when a message is available on a queue.
<li><a href="#gmtimer">gmtime_r</a></li>
<li><a href="#Introduction">Introduction</a>
<li><a href="#kill">kill</a></li>
+ <li><a href="#listen">listen</a></li>
<li><a href="#localtimer">localtime_r</a></li>
<li><a href="#Message_Queue">Named Message Queue Interfaces</a>
<li><a href="#mktime">mktime</a></li>
@@ -6541,9 +6660,9 @@ notify a task when a message is available on a queue.
<li><a href="#pthreadmutexattrinit">pthread_mutexattr_init</a></li>
<li><a href="#pthreadmutexattrsetpshared">pthread_mutexattr_setpshared</a></li>
<li><a href="#pthreadmutexdestrory">pthread_mutex_destroy</a></li>
- <li><a href="#pthreadmutexinit">pthread_mutex_init</a></li>
</td>
<td>
+ <li><a href="#pthreadmutexinit">pthread_mutex_init</a></li>
<li><a href="#pthreadmutexlock">pthread_mutex_lock</a></li>
<li><a href="#pthreadmutextrylock">pthread_mutex_trylock</a></li>
<li><a href="#pthreadmutexunlock">pthread_mutex_unlock</a></li>
diff --git a/nuttx/Makefile b/nuttx/Makefile
index 73197c65b..0f8704a80 100644
--- a/nuttx/Makefile
+++ b/nuttx/Makefile
@@ -211,10 +211,7 @@ $(BIN): context depend $(LINKLIBS)
$(MAKE) -C $(ARCH_SRC) TOPDIR=$(TOPDIR) LINKLIBS="$(LINKLIBS)" $(BIN)
depend:
- echo "CLEANDIRS: $(CLEANDIRS)"
- echo "MAKEDIRS: $(MAKEDIRS)"
- for dir in $(MAKEDIRS) ; do \
- echo "-- DEPS in $$dir --" ; \
+ @for dir in $(MAKEDIRS) ; do \
$(MAKE) -C $$dir TOPDIR=$(TOPDIR) depend ; \
done
diff --git a/nuttx/arch/sim/src/Makefile b/nuttx/arch/sim/src/Makefile
index 75ea07eee..6e5af4253 100644
--- a/nuttx/arch/sim/src/Makefile
+++ b/nuttx/arch/sim/src/Makefile
@@ -83,30 +83,29 @@ $(SPECOBJS): %$(OBJEXT): %.c
$(CC) -c $(HOSTCFLAGS) $< -o $@
libarch$(LIBEXT): $(OBJS)
- ( for obj in $(OBJS) ; do \
+ @( for obj in $(OBJS) ; do \
$(AR) $@ $${obj} || \
{ echo "$(AR) $@ $obj FAILED!" ; exit 1 ; } ; \
done ; )
-nuttx: $(LINKOBJS)
+nuttx$(EXEEXT): $(LINKOBJS)
$(CC) $(LDFLAGS) $(LDPATHES) -o $(TOPDIR)/$@ $(LINKOBJS) \
-Wl,--start-group $(LDLIBS) -Wl,--end-group $(EXTRA_LIBS)
@$(NM) $(TOPDIR)/$@ | \
- grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
- sort > $(TOPDIR)/System.map
-
+ grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
+ sort > $(TOPDIR)/System.map
.depend: Makefile $(SRCS)
- $(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
- touch $@
+ @$(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
+ @touch $@
depend: .depend
clean:
- rm -f libarch$(LIBEXT) *~
- if [ ! -z "$(OBJEXT)" ]; then rm -f *$(OBJEXT); fi
+ @rm -f libarch$(LIBEXT) *~
+ @if [ ! -z "$(OBJEXT)" ]; then rm -f *$(OBJEXT); fi
distclean: clean
- rm -f Make.dep .depend
+ @rm -f Make.dep .depend
-include Make.dep
diff --git a/nuttx/include/sys/socket.h b/nuttx/include/sys/socket.h
index 865b1f69e..c384d1e3a 100644
--- a/nuttx/include/sys/socket.h
+++ b/nuttx/include/sys/socket.h
@@ -180,6 +180,9 @@ EXTERN int socket(int domain, int type, int protocol);
EXTERN int bind(int sockfd, FAR const struct sockaddr *addr, socklen_t addrlen);
EXTERN int connect(int sockfd, FAR const struct sockaddr *addr, socklen_t addrlen);
+EXTERN int listen(int sockfd, int backlog);
+EXTERN int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+
EXTERN ssize_t send(int sockfd, FAR const void *buf, size_t len, int flags);
EXTERN ssize_t sendto(int sockfd, FAR const void *buf, size_t len, int flags,
FAR const struct sockaddr *to, socklen_t tolen);
diff --git a/nuttx/net/Makefile b/nuttx/net/Makefile
index 680db599d..fa0175409 100644
--- a/nuttx/net/Makefile
+++ b/nuttx/net/Makefile
@@ -40,8 +40,8 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh
ifeq ($(CONFIG_NET),y)
SOCK_ASRCS =
-SOCK_CSRCS = socket.c bind.c connect.c send.c sendto.c recv.c recvfrom.c \
- net-sockets.c net-close.c
+SOCK_CSRCS = socket.c bind.c connect.c listen.c accept.c send.c sendto.c \
+ recv.c recvfrom.c net-sockets.c net-close.c
ifeq ($(CONFIG_NET_SOCKOPTS),y)
SOCK_CSRCS += setsockopt.c getsockopt.c
diff --git a/nuttx/net/accept.c b/nuttx/net/accept.c
new file mode 100644
index 000000000..c54b49d37
--- /dev/null
+++ b/nuttx/net/accept.c
@@ -0,0 +1,129 @@
+/****************************************************************************
+ * net/accept.c
+ *
+ * Copyright (C) 2007 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#if defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <errno.h>
+
+#include "net-internal.h"
+
+/****************************************************************************
+ * Global Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function: accept
+ *
+ * Description:
+ * The accept function is used with connection-based socket types
+ * (SOCK_STREAM, SOCK_SEQPACKET and SOCK_RDM). It extracts the first
+ * connection request on the queue of pending connections, creates a new
+ * connected socket with mostly the same properties as 'sockfd', and
+ * allocates a new socket descriptor for the socket, which is returned. The
+ * newly created socket is no longer in the listening state. The original
+ * socket 'sockfd' is unaffected by this call. Per file descriptor flags
+ * are not inherited across an accept.
+ *
+ * The 'sockfd' argument is a socket descriptor that has been created with
+ * socket(), bound to a local address with bind(), and is listening for
+ * connections after a call to listen().
+ *
+ * On return, the 'addr' structure is filled in with the address of the
+ * connecting entity. The 'addrlen' argument initially contains the size
+ * of the structure pointed to by 'addr'; on return it will contain the
+ * actual length of the address returned.
+ *
+ * If no pending connections are present on the queue, and the socket is
+ * not marked as non-blocking, accept blocks the caller until a connection
+ * is present. If the socket is marked non-blocking and no pending
+ * connections are present on the queue, accept returns EAGAIN.
+ *
+ * Parameters:
+ * sockfd The listening socket descriptior
+ * addr Receives the address of the connecting client
+ * addrlen Input: allocated size of 'addr', Return: returned size of 'addr'
+ *
+ * Returned Value:
+ * Returns -1 on error. If it succeeds, it returns a non-negative integer
+ * that is a descriptor for the accepted socket.
+ *
+ * EAGAIN or EWOULDBLOCK
+ * The socket is marked non-blocking and no connections are present to
+ * be accepted.
+ * EBADF
+ * The descriptor is invalid.
+ * ENOTSOCK
+ * The descriptor references a file, not a socket.
+ * EOPNOTSUPP
+ * The referenced socket is not of type SOCK_STREAM.
+ * EINTR
+ * The system call was interrupted by a signal that was caught before
+ * a valid connection arrived.
+ * ECONNABORTED
+ * A connection has been aborted.
+ * EINVAL
+ * Socket is not listening for connections.
+ * EMFILE
+ * The per-process limit of open file descriptors has been reached.
+ * ENFILE
+ * The system maximum for file descriptors has been reached.
+ * EFAULT
+ * The addr parameter is not in a writable part of the user address
+ * space.
+ * ENOBUFS or ENOMEM
+ * Not enough free memory.
+ * EPROTO
+ * Protocol error.
+ * EPERM
+ * Firewall rules forbid connection.
+ *
+ * Assumptions:
+ *
+ ****************************************************************************/
+
+int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
+{
+ *get_errno_ptr() = ENOSYS;
+ return ERROR;
+}
+
+#endif /* CONFIG_NET && CONFIG_NSOCKET_DESCRIPTORS */
diff --git a/nuttx/net/listen.c b/nuttx/net/listen.c
new file mode 100644
index 000000000..30dcb778b
--- /dev/null
+++ b/nuttx/net/listen.c
@@ -0,0 +1,94 @@
+/****************************************************************************
+ * net/listen.c
+ *
+ * Copyright (C) 2007 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#if defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <errno.h>
+
+#include "net-internal.h"
+
+/****************************************************************************
+ * Global Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Function: listen
+ *
+ * Description:
+ * To accept connections, a socket is first created with socket(), a
+ * willingness to accept incoming connections and a queue limit for incoming
+ * connections are specified with listen, and then the connections are
+ * accepted with accept(). The listen() call applies only to sockets of
+ * type SOCK_STREAM or SOCK_SEQPACKET.
+ *
+ * Parameters:
+ * sockfd Socket descriptor of the bound socket
+ * backlog The maximum length the queue of pending connections may grow.
+ * If a connection request arrives with the queue full, the client
+ * may receive an error with an indication of ECONNREFUSED or,
+ * if the underlying protocol supports retransmission, the request
+ * may be ignored so that retries succeed.
+ *
+ * Returned Value:
+ * On success, zero is returned. On error, -1 is returned, and errno is set
+ * appropriately.
+ *
+ * EADDRINUSE
+ * Another socket is already listening on the same port.
+ * EBADF
+ * The argument 'sockfd' is not a valid descriptor.
+ * ENOTSOCK
+ * The argument 'sockfd' is not a socket.
+ * EOPNOTSUPP
+ * The socket is not of a type that supports the listen operation.
+ *
+ * Assumptions:
+ *
+ ****************************************************************************/
+
+int listen(int sockfd, int backlog)
+{
+ *get_errno_ptr() = ENOSYS;
+ return ERROR;
+}
+
+#endif /* CONFIG_NET && CONFIG_NSOCKET_DESCRIPTORS */
diff --git a/nuttx/netutils/uiplib/makestrings.c b/nuttx/netutils/uiplib/makestrings.c
index ff7df83db..feebeb120 100755
--- a/nuttx/netutils/uiplib/makestrings.c
+++ b/nuttx/netutils/uiplib/makestrings.c
@@ -43,6 +43,7 @@
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
+#include <libgen.h>
#include <errno.h>
/****************************************************************************
@@ -203,16 +204,18 @@ FILE *open_outfile(const char *filename)
}
/****************************************************************************
- * Function: generate_sourcefile_list
+ * Function: generate_mkdefs
****************************************************************************/
-int generate_sourcefile_list(void)
+int generate_mkdefs(void)
{
int ret = 1;
FILE *stream;
if (( stream = open_stringfile()))
{
+ printf("STRNG_ASRCS =\n");
+ printf("STRNG_CSRCS = ");
ret = 0;
while (fgets(g_line, 1024, stream) && !ret)
{
@@ -239,14 +242,16 @@ int generate_sourcefiles(void)
FILE *cstream;
const char *pname;
const char *pvalue;
+ char *filename;
char buffer[512];
int len;
int ndx;
int ret = 1;
-
+
+ filename = strdup(g_stringfile);
if (( instream = open_stringfile()))
{
- snprintf(buffer, 512, "%s.h", g_stringfile);
+ snprintf(buffer, 512, "%s.h", basename(filename));
hstream = open_outfile(buffer);
if (hstream)
{
@@ -258,11 +263,12 @@ int generate_sourcefiles(void)
ret = parse_stringfile_line(&pname, &pvalue);
if (!ret)
{
+ len = strlen(pvalue);
+
snprintf(buffer, 512, "%s.c", pname);
cstream = open_outfile(buffer);
if (cstream)
{
- len = strlen(pvalue);
fprintf(cstream, "const char %s[%d] = {", pname, len);
for (ndx = 0; ndx < len; ndx++)
{
@@ -272,7 +278,7 @@ int generate_sourcefiles(void)
}
fprintf(cstream, "0x%02x", pvalue[ndx]);
}
- fprintf(cstream, "}\n");
+ fprintf(cstream, "};\n");
fclose(cstream);
}
fprintf(hstream, "extern const char %s[%d];\n", pname, len);
@@ -283,6 +289,7 @@ int generate_sourcefiles(void)
}
fclose(instream);
}
+ free(filename);
return ret;
}
@@ -364,7 +371,7 @@ int main(int argc, char **argv, char **envp)
ret = generate_sourcefiles();
break;
case SRCLIST:
- ret = generate_sourcefile_list();
+ ret = generate_mkdefs();
break;
}
return ret;
diff --git a/nuttx/netutils/webclient/Make.defs b/nuttx/netutils/webclient/Make.defs
index a5bffd45a..7f6c98ced 100644
--- a/nuttx/netutils/webclient/Make.defs
+++ b/nuttx/netutils/webclient/Make.defs
@@ -34,4 +34,4 @@
############################################################################
WEBCLIENT_ASRCS =
-WEBCLIENT_CSRCS = webclient-strings.c webclient.c
+WEBCLIENT_CSRCS = webclient.c
diff --git a/nuttx/netutils/webclient/webclient.h b/nuttx/netutils/webclient/webclient.h
index a293b61fc..8f7a8644f 100644
--- a/nuttx/netutils/webclient/webclient.h
+++ b/nuttx/netutils/webclient/webclient.h
@@ -38,7 +38,7 @@
#include <sys/types.h>
#include <net/uip/uipopt.h>
-#include "webclient-strings.h"
+#include "netutil-strings.h"
#define WEBCLIENT_CONF_MAX_URLLEN 100
diff --git a/nuttx/netutils/webserver/Make.defs b/nuttx/netutils/webserver/Make.defs
index 94469f526..ca3567861 100644
--- a/nuttx/netutils/webserver/Make.defs
+++ b/nuttx/netutils/webserver/Make.defs
@@ -34,4 +34,4 @@
############################################################################
WEBSERVER_ASRCS =
-WEBSERVER_CSRCS = httpd.c http-strings.c httpd-fs.c httpd-cgi.c
+WEBSERVER_CSRCS = httpd.c httpd-fs.c httpd-cgi.c
diff --git a/nuttx/netutils/webserver/httpd.c b/nuttx/netutils/webserver/httpd.c
index 4f18a72df..dfccdef6c 100644
--- a/nuttx/netutils/webserver/httpd.c
+++ b/nuttx/netutils/webserver/httpd.c
@@ -42,7 +42,7 @@
#include "httpd.h"
#include "httpd-cgi.h"
-#include "http-strings.h"
+#include "netutil-strings.h"
#include <string.h>