|
49 | 49 | //! THE POSSIBILITY OF SUCH DAMAGE. |
50 | 50 | // |
51 | 51 | //***************************************************************************** |
| 52 | + |
| 53 | +#include <string.h> |
| 54 | + |
52 | 55 | #include "socket.h" |
53 | 56 |
|
54 | 57 | extern void HAL_Delay(uint32_t); |
@@ -85,7 +88,19 @@ static uint8_t sock_pack_info[_WIZCHIP_SOCK_NUM_] = {0,}; |
85 | 88 | if(len == 0) return SOCKERR_DATALEN; \ |
86 | 89 | }while(0); \ |
87 | 90 |
|
| 91 | +void WIZCHIP_EXPORT(socket_reset)(void) { |
| 92 | + sock_any_port = SOCK_ANY_PORT_NUM; |
| 93 | + sock_io_mode = 0; |
| 94 | + sock_is_sending = 0; |
| 95 | + /* |
| 96 | + memset(sock_remained_size, 0, _WIZCHIP_SOCK_NUM_ * sizeof(uint16_t)); |
| 97 | + memset(sock_pack_info, 0, _WIZCHIP_SOCK_NUM_ * sizeof(uint8_t)); |
| 98 | + */ |
88 | 99 |
|
| 100 | +#if _WIZCHIP_ == 5200 |
| 101 | + memset(sock_next_rd, 0, _WIZCHIP_SOCK_NUM_ * sizeof(uint16_t)); |
| 102 | +#endif |
| 103 | +} |
89 | 104 |
|
90 | 105 | int8_t WIZCHIP_EXPORT(socket)(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag) |
91 | 106 | { |
@@ -336,8 +351,13 @@ int32_t WIZCHIP_EXPORT(recv)(uint8_t sn, uint8_t * buf, uint16_t len) |
336 | 351 | if(recvsize != 0) break; |
337 | 352 | else if(getSn_TX_FSR(sn) == getSn_TxMAX(sn)) |
338 | 353 | { |
| 354 | + // dpgeorge: Getting here seems to be an orderly shutdown of the |
| 355 | + // socket, and trying to get POSIX behaviour we return 0 because: |
| 356 | + // "If no messages are available to be received and the peer has per‐ |
| 357 | + // formed an orderly shutdown, recv() shall return 0". |
| 358 | + // TODO this return value clashes with SOCK_BUSY in non-blocking mode. |
339 | 359 | WIZCHIP_EXPORT(close)(sn); |
340 | | - return SOCKERR_SOCKSTATUS; |
| 360 | + return 0; |
341 | 361 | } |
342 | 362 | } |
343 | 363 | else |
|
0 commit comments