未验证 提交 19563a21 编写于 作者: B Bernard Xiong 提交者: GitHub

Merge pull request #2382 from Lawlieta/develop

[net][sal_socket] improve closesocke/shutdown error handling
...@@ -78,29 +78,39 @@ RTM_EXPORT(bind); ...@@ -78,29 +78,39 @@ RTM_EXPORT(bind);
int shutdown(int s, int how) int shutdown(int s, int how)
{ {
int socket; int error = 0;
int socket = -1;
struct dfs_fd *d; struct dfs_fd *d;
socket = dfs_net_getsocket(s);
if (socket < 0)
{
rt_set_errno(-ENOTSOCK);
return -1;
}
d = fd_get(s); d = fd_get(s);
if (d == NULL) if (d == NULL)
{ {
rt_set_errno(-EBADF); rt_set_errno(-EBADF);
return -1; return -1;
} }
socket = dfs_net_getsocket(s);
if (sal_shutdown(socket, how) == 0) if (sal_shutdown(socket, how) == 0)
{ {
error = 0;
}
else
{
rt_set_errno(-ENOTSOCK);
error = -1;
}
/* socket has been closed, delete it from file system fd */ /* socket has been closed, delete it from file system fd */
fd_put(d); fd_put(d);
fd_put(d); fd_put(d);
return 0; return error;
}
return -1;
} }
RTM_EXPORT(shutdown); RTM_EXPORT(shutdown);
...@@ -240,25 +250,39 @@ RTM_EXPORT(socket); ...@@ -240,25 +250,39 @@ RTM_EXPORT(socket);
int closesocket(int s) int closesocket(int s)
{ {
int socket = dfs_net_getsocket(s); int error = 0;
int socket = -1;
struct dfs_fd *d; struct dfs_fd *d;
socket = dfs_net_getsocket(s);
if (socket < 0)
{
rt_set_errno(-ENOTSOCK);
return -1;
}
d = fd_get(s); d = fd_get(s);
if(!d) if (d == RT_NULL)
{ {
rt_set_errno(-EBADF);
return -1; return -1;
} }
if (sal_closesocket(socket) == 0) if (sal_closesocket(socket) == 0)
{ {
error = 0;
}
else
{
rt_set_errno(-ENOTSOCK);
error = -1;
}
/* socket has been closed, delete it from file system fd */ /* socket has been closed, delete it from file system fd */
fd_put(d); fd_put(d);
fd_put(d); fd_put(d);
return 0; return error;
}
return -1;
} }
RTM_EXPORT(closesocket); RTM_EXPORT(closesocket);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册