mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 13:16:07 +00:00
- Implement OskitTCPSetSockOpt and OskitTCPGetSockOpt (currently unused)
svn path=/trunk/; revision=43861
This commit is contained in:
parent
f28d99cab1
commit
43e17b4127
2 changed files with 63 additions and 0 deletions
|
@ -150,6 +150,18 @@ void OskitTCPGetAddress( void *socket,
|
||||||
OSK_UINT *RemoteAddress,
|
OSK_UINT *RemoteAddress,
|
||||||
OSK_UI16 *RemotePort );
|
OSK_UI16 *RemotePort );
|
||||||
|
|
||||||
|
int OskitTCPGetSockOpt(void *socket,
|
||||||
|
int level,
|
||||||
|
int optname,
|
||||||
|
char *buffer,
|
||||||
|
int *size);
|
||||||
|
|
||||||
|
int OskitTCPSetSockOpt(void *socket,
|
||||||
|
int level,
|
||||||
|
int optname,
|
||||||
|
char *buffer,
|
||||||
|
int size);
|
||||||
|
|
||||||
#undef errno
|
#undef errno
|
||||||
|
|
||||||
void *fbsd_malloc( unsigned int bytes, char *file, unsigned line, ... );
|
void *fbsd_malloc( unsigned int bytes, char *file, unsigned line, ... );
|
||||||
|
|
|
@ -428,6 +428,57 @@ void OskitTCPReceiveDatagram( OSK_PCHAR Data, OSK_UINT Len,
|
||||||
/* The buffer Ip is freed by tcp_input */
|
/* The buffer Ip is freed by tcp_input */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int OskitTCPSetSockOpt(void *socket,
|
||||||
|
int level,
|
||||||
|
int optname,
|
||||||
|
char *buffer,
|
||||||
|
int size)
|
||||||
|
{
|
||||||
|
struct mbuf *m;
|
||||||
|
|
||||||
|
if (size >= MLEN)
|
||||||
|
return OSK_EINVAL;
|
||||||
|
|
||||||
|
m = m_get(M_WAIT, MT_SOOPTS);
|
||||||
|
if (!m)
|
||||||
|
return OSK_ENOMEM;
|
||||||
|
|
||||||
|
m->m_len = size;
|
||||||
|
|
||||||
|
memcpy(m->m_data, buffer, size);
|
||||||
|
|
||||||
|
/* m is freed by sosetopt */
|
||||||
|
return sosetopt(socket, level, optname, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
int OskitTCPGetSockOpt(void *socket,
|
||||||
|
int level,
|
||||||
|
int optname,
|
||||||
|
char *buffer,
|
||||||
|
int *size)
|
||||||
|
{
|
||||||
|
int error, oldsize = *size;
|
||||||
|
struct mbuf *m;
|
||||||
|
|
||||||
|
error = sogetopt(socket, level, optname, &m);
|
||||||
|
if (!error)
|
||||||
|
{
|
||||||
|
*size = m->m_len;
|
||||||
|
|
||||||
|
if (!buffer || oldsize < m->m_len)
|
||||||
|
{
|
||||||
|
m_freem(m);
|
||||||
|
return OSK_EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buffer, m->m_data, m->m_len);
|
||||||
|
|
||||||
|
m_freem(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
int OskitTCPListen( void *socket, int backlog ) {
|
int OskitTCPListen( void *socket, int backlog ) {
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue