
    8Cf                        d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ dddd	Zd
ddddZddZ	 	 	 	 ddZy)    )annotationsN)
ip_address)AnyDictOptional)ServerError)HTTPd   backlogc                  | |f}	 t        |       }t        |      } t        j                  |j                  dk(  rt        j                  nt        j
                        }|j                  t        j                  t        j                  d       |j                  |       |j                  |       |j                  d       |S # t        $ r t        j                         }Y w xY w)zCreate TCP server socket.
    :param host: IPv4, IPv6 or hostname may be specified
    :param port: TCP port number
    :param backlog: Maximum number of connections to queue
    :return: socket.socket object
          T)r   strsocketversionAF_INET6AF_INET
ValueError
setsockopt
SOL_SOCKETSO_REUSEADDRbindlistenset_inheritable)hostportr   locationipsocks         S/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/sanic/server/socket.pybind_socketr"      s     d|H2w}}!zzQFOOFNN

 	OOF%%v':':A>IIhKKK  }}s   AC C"!C"i  )moder   c                  t         j                  j                  |       } t         j                  j                  |       }t         j                  j	                  |      st        d|       	 t        j                  t        j                  | d      j                        st        d|        	 |  dt        j                          }t        j                  t        j                        }	 |j                  |       	 t        j                  ||       |j!                  |       t        j"                  ||        |S # t
        $ r Y w xY w#  	 t        j$                  |        #  xY wxY w#  	 |j'                           #  xY wxY w)zCreate unix socket.
    :param path: filesystem path
    :param backlog: Maximum number of connections to queue
    :return: socket.socket object
    zSocket folder does not exist: Ffollow_symlinkszExisting file is not a socket: .)ospathabspathdirnameisdirFileNotFoundErrorstatS_ISSOCKst_modeFileExistsErrorsecretstoken_urlsafer   AF_UNIXr   chmodr   renameunlinkclose)r)   r#   r   foldertmp_pathr    s         r!   bind_unix_socketr;   '   sD    77??4 DWW__T"F77== "@ IJJ}}RWWT5AIIJ!$CD6"JKK K
 q..012H==(D		(		HHXt$KK IIh% K/  			(#	JJLEsa   -AD> -E. ?=E >	E
	E
E+E&%E+&E((E++E. .F1FFFFc                p   | sy	 t        j                  t        j                   | d      j                        r?t	        j                  t        j
                        5 }	 |j                  |        ddd       yy# t        $ r t        j                  |        Y *w xY w# 1 sw Y   yxY w# t        $ r Y yw xY w)z+Remove dead unix socket during server exit.NFr%   )
r.   r/   r(   r0   r   r4   connectConnectionRefusedErrorr7   r-   )r)   testsocks     r!   remove_unix_socketr@   P   s    	==u=EEFv~~. $($$$T*$ $ G
 . $IIdO$$ $
  sN   AB) BA9/B) 9BBBBB&"B) &B) )	B54B5c                h   | j                  d      t        j                  u ry | j                  d      }| d   }| d   }|rt        ||      }|| d<   |5	 t	        | d   | d   |      }|j                  d
       || d<   d | d<   d | d<   |S # t
        $ r}t        d| d	      }d
|_        |d }~ww xY w)Nr   r    unixr   r   r   r   zSanic server could not start: z.

This may have happened if you are running Sanic in the global scope and not inside of a `if __name__ == "__main__"` block.

See more information: https://sanic.dev/en/guide/deployment/manager.html#how-sanic-server-starts-processes
T)	getr	   	VERSION_3r;   r"   OSErrorr   quietr   )server_settingsr    rB   r   eerrors         r!   configure_socketrJ   `   s     9%7v&D6"Di(Gg6"&|	''D  	T""&"&"&K  
	0 46 6E EKK
	s   B 	B1B,,B1)r   r   r   intreturnsocket.socket)r)   r   rL   rM   )r)   zOptional[str]rL   None)rG   zDict[str, Any]rL   zOptional[socket.SocketType])
__future__r   r(   r2   r   r.   	ipaddressr   typingr   r   r   sanic.exceptionsr   sanic.http.constantsr	   r"   r;   r@   rJ        r!   <module>rV      sT    " 	      & & ( % 25 0 ).s &R "#" "rU   