def _read_tcp_options(self, size):
counter = <NUM_LIT:0>         <EOL>optkind = list()    <EOL>options = dict()    <EOL>while counter < size:<EOL><INDENT>kind = self._read_unpack(<NUM_LIT:1>)<EOL>opts = TCP_OPT.get(kind)<EOL>enum = OPT_TYPE.get(kind)<EOL>if opts is None:<EOL><INDENT>len_ = size - counter<EOL>counter = size<EOL>optkind.append(enum)<EOL>options[enum.name] = self._read_fileng(len_)<EOL>break<EOL><DEDENT>dscp = opts[<NUM_LIT:1>]<EOL>if opts[<NUM_LIT:0>]:<EOL><INDENT>len_ = self._read_unpack(<NUM_LIT:1>)<EOL>byte = opts[<NUM_LIT:2>](len_)<EOL>if byte:    <EOL><INDENT>data = process_opt[opts[<NUM_LIT:3>]](self, byte, kind)<EOL><DEDENT>else:       <EOL><INDENT>data = dict(<EOL>kind=kind,      <EOL>length=<NUM_LIT:2>,       <EOL>flag=True,      <EOL>)<EOL><DEDENT><DEDENT>else:           <EOL><INDENT>len_ = <NUM_LIT:1><EOL>data = dict(<EOL>kind=kind,      <EOL>length=<NUM_LIT:1>,       <EOL>)<EOL><DEDENT>counter += len_<EOL>if enum in optkind:<EOL><INDENT>if isinstance(options[dscp], tuple):<EOL><INDENT>options[dscp] += (Info(data),)<EOL><DEDENT>else:<EOL><INDENT>options[dscp] = (Info(options[dscp]), Info(data))<EOL><DEDENT><DEDENT>else:<EOL><INDENT>optkind.append(enum)<EOL>options[dscp] = data<EOL><DEDENT>if not kind:<EOL><INDENT>break<EOL><DEDENT><DEDENT>if counter < size:<EOL><INDENT>len_ = size - counter<EOL>options['<STR_LIT>'] = self._read_fileng(len_)<EOL><DEDENT>return tuple(optkind), options<EOL>
Read TCP option list.

        Positional arguments:
            * size -- int, length of option list

        Returns:
            * tuple -- TCP option list
            * dict -- extracted TCP option