At proto support for espressif port + global

This commit is contained in:
CarsonCoder 2023-12-23 17:59:31 -05:00
parent bb178ebdce
commit 211c307f79
11 changed files with 1843740 additions and 12 deletions

View file

@ -182,6 +182,7 @@ STATIC void mark_user_socket(int fd, socketpool_socket_obj_t *obj) {
STATIC bool _socketpool_socket(socketpool_socketpool_obj_t *self,
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type,
int proto,
socketpool_socket_obj_t *sock) {
int addr_family;
int ipproto;
@ -195,6 +196,8 @@ STATIC bool _socketpool_socket(socketpool_socketpool_obj_t *self,
#endif
}
ipproto=proto;
int socket_type;
if (type == SOCKETPOOL_SOCK_STREAM) {
socket_type = SOCK_STREAM;
@ -226,9 +229,9 @@ STATIC bool _socketpool_socket(socketpool_socketpool_obj_t *self,
// special entry for workflow listener (register system socket)
bool socketpool_socket(socketpool_socketpool_obj_t *self,
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type,
socketpool_socket_obj_t *sock) {
int proto, socketpool_socket_obj_t *sock) {
if (!_socketpool_socket(self, family, type, sock)) {
if (!_socketpool_socket(self, family, type, proto, sock)) {
return false;
}
@ -241,7 +244,7 @@ bool socketpool_socket(socketpool_socketpool_obj_t *self,
}
socketpool_socket_obj_t *common_hal_socketpool_socket(socketpool_socketpool_obj_t *self,
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type) {
socketpool_socketpool_addressfamily_t family, int proto, socketpool_socketpool_sock_t type) {
if (family != SOCKETPOOL_AF_INET) {
mp_raise_NotImplementedError(translate("Only IPv4 sockets supported"));
}
@ -249,7 +252,7 @@ socketpool_socket_obj_t *common_hal_socketpool_socket(socketpool_socketpool_obj_
socketpool_socket_obj_t *sock = m_new_obj_with_finaliser(socketpool_socket_obj_t);
sock->base.type = &socketpool_socket_type;
if (!_socketpool_socket(self, family, type, sock)) {
if (!_socketpool_socket(self, family, type, proto, sock)) {
mp_raise_RuntimeError(translate("Out of sockets"));
}
mark_user_socket(sock->num, sock);

153667
ports/espressif/os Normal file

File diff suppressed because it is too large Load diff

338011
ports/espressif/os.path Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

338011
ports/espressif/signal Normal file

File diff suppressed because it is too large Load diff

338011
ports/espressif/subprocess Normal file

File diff suppressed because it is too large Load diff

338011
ports/espressif/sys Normal file

File diff suppressed because it is too large Load diff

View file

View file

@ -86,21 +86,23 @@ MP_DEFINE_EXCEPTION(gaierror, OSError)
//|
//| IP_MULTICAST_TTL: int
//|
//| def socket(self, family: int = AF_INET, type: int = SOCK_STREAM) -> socketpool.Socket:
//| def socket(self, family: int = AF_INET, type: int = SOCK_STREAM, proto: int = 0) -> socketpool.Socket:
//| """Create a new socket
//|
//| :param ~int family: AF_INET or AF_INET6
//| :param ~int type: SOCK_STREAM, SOCK_DGRAM or SOCK_RAW
//| :param ~int proto: Int
//|
//| The ``proto`` (protocol) and ``fileno`` arguments available in ``socket.socket()``
//| in CPython are not supported.
//| The ``fileno`` argument available in ``socket.socket()``
//| in CPython is not supported.
//| """
//| ...
STATIC mp_obj_t socketpool_socketpool_socket(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_family, ARG_type };
enum { ARG_family, ARG_type, ARG_proto };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_family, MP_ARG_INT, {.u_int = SOCKETPOOL_AF_INET} },
{ MP_QSTR_type, MP_ARG_INT, {.u_int = SOCKETPOOL_SOCK_STREAM} },
{ MP_QSTR_proto, MP_ARG_INT, {.u_int = 0} },
};
socketpool_socketpool_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]);
@ -109,8 +111,9 @@ STATIC mp_obj_t socketpool_socketpool_socket(size_t n_args, const mp_obj_t *pos_
socketpool_socketpool_addressfamily_t family = args[ARG_family].u_int;
socketpool_socketpool_sock_t type = args[ARG_type].u_int;
int proto = args[ARG_proto].u_int;
return common_hal_socketpool_socket(self, family, type);
return common_hal_socketpool_socket(self, family, type, proto);
}
MP_DEFINE_CONST_FUN_OBJ_KW(socketpool_socketpool_socket_obj, 1, socketpool_socketpool_socket);

View file

@ -64,7 +64,7 @@ typedef enum {
void common_hal_socketpool_socketpool_construct(socketpool_socketpool_obj_t *self, mp_obj_t radio);
socketpool_socket_obj_t *common_hal_socketpool_socket(socketpool_socketpool_obj_t *self,
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type);
socketpool_socketpool_addressfamily_t family, int proto, socketpool_socketpool_sock_t type);
mp_obj_t common_hal_socketpool_socketpool_gethostbyname(socketpool_socketpool_obj_t *self,
const char *host);
@ -76,7 +76,7 @@ mp_obj_t common_hal_socketpool_socketpool_gethostbyname_raise(socketpool_socketp
// closed automatically.
bool socketpool_socket(socketpool_socketpool_obj_t *self,
socketpool_socketpool_addressfamily_t family, socketpool_socketpool_sock_t type,
socketpool_socket_obj_t *sock);
int proto, socketpool_socket_obj_t *sock);
NORETURN void common_hal_socketpool_socketpool_raise_gaierror_noname(void);

View file

@ -354,7 +354,7 @@ bool supervisor_start_web_workflow(void) {
}
if (common_hal_socketpool_socket_get_closed(&listening)) {
socketpool_socket(&pool, SOCKETPOOL_AF_INET, SOCKETPOOL_SOCK_STREAM, &listening);
socketpool_socket(&pool, SOCKETPOOL_AF_INET, SOCKETPOOL_SOCK_STREAM, 0, &listening);
common_hal_socketpool_socket_settimeout(&listening, 0);
// Bind to any ip. (Not checking for failures)
common_hal_socketpool_socket_bind(&listening, "", 0, web_api_port);